Regex 使用sed替换整个短语

Regex 使用sed替换整个短语,regex,bash,shell,sed,sh,Regex,Bash,Shell,Sed,Sh,在添加和删除区域引用时,我正在使用ShellScript编辑绑定dns配置文件。 然后在“master.conf”文件中,我们有以下内容: ... ... zone "mydomain.com" { type master; file "/var/zones/m/mydomain.com" }; ... ... 我想用“sed”将这个条目“remove”到“mydomain.com”,但我无法为这个条目编写正确的正则表达式。表达式必须使用变量域名并搜索到下一个右括号和分号,如下所

在添加和删除区域引用时,我正在使用ShellScript编辑绑定dns配置文件。 然后在“master.conf”文件中,我们有以下内容:

...
...
zone "mydomain.com" {
   type master; 
   file "/var/zones/m/mydomain.com"
};
...
...
我想用“sed”将这个条目“remove”到“mydomain.com”,但我无法为这个条目编写正确的正则表达式。表达式必须使用变量域名并搜索到下一个右括号和分号,如下所示:

DOMAIN_NAME="mydomain.com"
sed -i.bak -r 's/^zone "'$DOMAIN_NAME'" \{(.*)\};$//g' /var/zones/master.conf
请注意,我们应该忽略括号之间的内容,而这一块必须替换为“nothing”。
我尝试了这个表达式的一些变体,但没有成功。

如果它不必是一行,您可以使用“grep”获取行号,然后使用“sed”从行号中删除整个诗节


请参见

也许您可以使用awk

awk -v dom="mydomain.com" '$2 ~ dom, /^};$/ {next}1' file
是范围运算符。第二个字段中带有
dom
的行与仅包含“};”的行之间的范围为真<代码>下一步跳过这些行。其余的都打印出来了


使用
awk'…'文件>tmp和&mv tmp文件
覆盖原始文件。

尝试下面的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"

    };
输出:

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"

    };

相当危险的正则表达式,因为
(.*)
将吸收所有内容,直到文件中的最后一个
}
。您可能会对文件中的所有区域进行核爆。@只将其标记为下一个右括号。我已经把问题改成了课文。谢谢你的留言。是的,我可以用awk。但当我尝试您的提示时,结果输出是记录条目。在我的问题中,我想从文件中删除这段文本,并将其替换为“”(空字符串)。脚本的整个要点是它跳过了条目(这就是
接下来要做的事情)。Tom,你的解决方案也很好,在我的脚本中更加优雅。我之前的评论很仓促。坦克很多。只有一件事,关闭支架后有一条线断裂。我应该在正则表达式中输入哪个字符来删除此换行符?我尝试了\n和[\n],但没有在后面删除。