繁体   English   中英

用sed替换整个短语

[英]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'从行号中删除整个节。

请参阅使用sed从文本文件中删除特定行号?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM