シリアルデルタSED onelinerと命名

シリアルデルタSED onelinerと命名

名前付きシーケンスを追加する必要があり、そのために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

関連情報