命名串行增量 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。该怎么做?我想出了一个:

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

结合原始问题和 choroba 的答案,您可以使用 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

相关内容