sed语法错误

时间:2011-11-29 14:44:31

标签: shell sed centos

我想通过一个shellcript替换我的named.conf文件中的转发器。原因是我有防火墙,必须在VirtualBox VM中使用我的localhost。

我这样做

forwarder="//        forwarders {10.123.14.2;10.123.14.3;};"
forwarder1="        forwarders {10.123.14.2;10.123.14.3;};"
sed '/'"$forwarder"'/s/'"$forwarder"'/'"$forwarder1"'/'> /etc/named.conf

但是我收到语法错误。 谁能告诉我我做错了什么并提出解决方案?

2 个答案:

答案 0 :(得分:1)

sed内,//字符很特殊,因此您必须将它们转义。

对转发器字符串尝试类似的操作:forwarder="\/\/ ...

答案 1 :(得分:1)

Sed可以使用几乎任何字符来分隔s / search / replace / strings,试试

sed "\@$forwarder@s@$forwarder@$forwarder1@" /etc/named.conf.old > /etc/named.conf

请注意,您的示例没有输入文件,如果您确实执行了上述行,则可能已将您的/etc/named.conf

归零

现代seds支持-i选项,该选项将读取并保存您的文件到位,即

sed -i "@......" file

我希望这会有所帮助。