我需要增加命名序列,我想用 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