1

私はいくつかのtinydnsゾーンファイル内のTTLの大規模なセットを置き換えるために働いています。TTLが現在何に設定されているかに関係なく、900にしたいと思っています。sedの魔法を探していますが、もうすぐそこにいるようです。

TTLを置き換えるために約50のホスト名があり、ゾーンは散発的に割り当てられています。

ゾーンファイルの行にTTLを含める必要はありません。持っていない場合は、TTLを追加する必要があります。つまり、検索する行は次のようになります。

^。*hostname:(hostname | IP)[:#] $

例えば

+ abc.com:12.12.12.12
= *。abc.com:xyzcom:1200

そのため、sedコマンドの正規表現を作成するためのサポートが必要です。次のようになります。

cat hosts.txt | ホストを読んでいる間; 行う
  sed -i's /'$ host':([^:] *)(?:[0-9] *)/' $ host':\ 1:900/'ゾーンファイル*
終わり

寛大なsedの達人はいますか?

4

1 に答える 1

4

正規表現は、いくつかのタスクを実行するための最良の方法であるとは限りません。データ ファイルには構造化された情報が含まれています (つまり、":" などの定数文字で区切られています)。したがって、フィールドを使用して操作する方が簡単です。ここにawkソリューションがあります

awk 'BEGIN{ OFS=FS=":"}NF<3{ $0=$0":"900}NF>=3{ $NF=900}1' file

正規表現の構築に時間を費やす必要はありません。

于 2009-07-08T00:44:30.597 に答える