[英]Using sed to replace entire phrase
在添加和删除区域引用时,我正在使用ShellScript编辑我的bind dns配置文件。 然后在“master.conf”文件中我们有这样的内容:
...
...
zone "mydomain.com" {
type master;
file "/var/zones/m/mydomain.com"
};
...
...
我希望使用“sed”将此条目“删除”到“mydomain.com”,但我无法为此编写正确的正则表达式。 表达式必须使用变量域名并搜索直到下一个括号和分号,如下所示:
DOMAIN_NAME="mydomain.com"
sed -i.bak -r 's/^zone "'$DOMAIN_NAME'" \{(.*)\};$//g' /var/zones/master.conf
看到我们应该忽略括号之间的内容,并且这个块必须替换为“nothing”。 我尝试了这个表达式的一些变体,但没有成功。
也许你可以使用awk?
awk -v dom="mydomain.com" '$2 ~ dom, /^};$/ {next}1' file
,
是范围运营商。 第二个字段中带有dom
的行与仅包含“};”的行之间的范围为true。 next
跳过那些线。 其余的都打印出来了。
使用awk '...' file > tmp && mv tmp file
覆盖原始文件。
尝试下面应该使用的sed脚本
码:
sed -i '/"mydomain.com" [{]/{
:loop
N
s/[}][;]/&/
t end
b loop
:end
d
}' master.conf
输入:
zone "myd.com" {
type master;
file "/var/zones/m/mydomain.com"
};
zone "mydomain.com" {
type master;
file "/var/zones/m/mydomain.com"
};
输出:
zone "myd.com" {
type master;
file "/var/zones/m/mydomain.com"
};
如果它不必是单行,您可以使用'grep'来获取行号,然后使用'sed'从行号中删除整个节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.