[英]Replace serial in zone files with sed
我需要替换区域文件中的序列号,我认为最简单的方法是使用sed来改变它。 我有以下一行来测试。
@ IN SOA ns1.domain.com. webdev.domain.com. ( 2006080401 ; serial 8H ; refresh 2H ; retry 1W ; expire 4h) ; minimum ttl NS ns1.domain.com. NS ns2.domain.com. MX 10 mail1.domain.com. MX 20 mail2.domain.com. domain.com. A 255.255.255.255 mail1 A 255.255.255.255 mail2 A 10.10.10.10 www CNAME domain.com. ftp CNAME www webmail CNAME www
我使用http://rubular.com/创建的正则表达式如下。 在rebular上,我得到的正则表达式只匹配一行。
\\s*[0-9] \\s ;\\s*serial
所以在sed中我会使用如下。
sed -i 's/\\s*[0-9] \\s ;\\s*serial/20091218 ; serial/g' *.zone
我的问题是,这不会改变文件中的任何内容。 我已经尝试了好几件事。 谢谢你的帮助
在第二个“\\ s”之后看起来你需要一个星号
sed -i 's/\s*[0-9]\s*;\s*serial/20091218 ; serial/' *.zone
在那里放置更多东西可能不会有什么坏处:
sed -i 's/^\s*[0-9]\s*;\s*serial\s$/20091218 ; serial/' *.zone
我拿出了“g”,因为你可能不会在一行上出现多次。
如果您不关心保留领先的空间,您可以简单地做:
awk '/serial/{$1=20091218}1'
@ IN SOA ns1.domain.com. webdev.domain.com. ( 20091218 ; serial 8H ; refresh
另一方面,如果让串口排队对你很重要,你可以这样做:
awk '/serial/{printf "%8s%-16s; %s\n"," ",20091218,$3;next}1'
@ IN SOA ns1.domain.com. webdev.domain.com. ( 20091218 ; serial 8H ; refresh
只要保持序列号小于16位,这将完美排列。
这是一个适合我的perl方法:
cat /var/named/zonefile.db | perl -e "while(<>){ s/\d+(\s*;\s*[sS]erial)/20091218\1/; print; }"
保留领先的空间。
您的sed模式只查找一位数。 这对我有用:
sed -i 's/\s*[0-9]\+\s;\s*serial/20091218 ; serial/g' *.zone && cat *.zone
awk -F"," '/serial$/{$0="20091218 ; serial"}1' OFS="," file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.