我需要使用perl或sed等命令在/etc/xinetd.d/chargen中设置disable = no。
/etc/xinetd.d/chargen内容是:
#…
awk好吗?:
$ awk '/service chargen/,/}/{if(/disable/)sub(/yes/,"no")}1' file ... disable = no ... disable = no ...
解释:
$ awk ' # well, awk /service chargen/,/}/ { # between service chargen {...} if(/disable/) # if disable found sub(/yes/,"no") # replace yes with no }1' file # output
随意调整正则表达式( /disable/ )根据自己的喜好(例如 /^ *disable *=/ )。
/disable/
/^ *disable *=/
运用 sed , 您可以使用:
sed
sed -e '/^service chargen/,/^}/ { /disable *= yes/ s/yes/no/; }'
第一部分从一个开始搜索行的范围 service chargen 以后开始的第一行 } ;在该范围内,它查找包含的行 disable = yes 任意数量的空格 disable 和 = yes ,并改变了 yes 至 no 。如有必要,您可以使正则表达式更加繁琐(没有尾随空格;不要编辑 service chargen2018 块,要求 } 没有尾随空白等)但它可能没有必要。
service chargen
}
disable = yes
disable
= yes
yes
no
service chargen2018
您通常可以进行就地编辑,但要注意系统之间在如何执行此操作的语义上的差异。 (BSD和macOS要求 -i '' ; GNU只需要 -i ;都接受 -i.bak 并且它在两者中都意味着相同但你有一个备份文件要清理。)
-i ''
-i
-i.bak