名前付きシーケンスを追加する必要があり、そのためにsedを使用したいと思います。これが私がする方法です:
echo 2015092315 | gsed s/20[0-9][0-9][0-9][0-9]*/`date +%Y%m%d%H`/g
しかし、私はゾーンファイルの更新が1時間に1回以上発生する可能性があり、上記だけでは不十分であることに気づきました。
今度はシーケンス番号を1ずつ増やしたいと思います。行う方法?私はこれを思い出しました。
gsed 's/20[0-9][0-9][0-9][0-9]*/expr & + 1/e'
動作しますが、行の先頭(スペース)と行の終わり(コメント)を削除し、私が望んでいないコメント(sh:serial:見つかりません)に関するエラーを表示します。
答え1
Perlが構造に来ます:
perl -pe 's/(20[0-9]{3,})/$1+1/e' file
答え2
元の質問と chorobの答えを組み合わせると、GNUを使用して次の行を取得できますsed
。
sed -r 's/(20[0-9]{3,8})(.*$)/echo `expr \1 + 1` "\2"/e'
次のように使用できます。
[admin@localhost ~]$ echo '2015092315 ; serial' | sed -r 's/(20[0-9]{3,8})(.*$)/echo `expr \1 + 1` "\2"/e'
2015092316 ; serial
またはファイルに:
[admin@localhost ~]$ sed -i -r 's/(20[0-9]{3,8})(.*$)/echo `expr \1 + 1` "\2"/e' /path/to/zone_file