我在配置文件中有这个:
<virtual-machine-pool mypool>
virtual-machine machine1
</virtual-machine-pool>
<virtual-machine machine1>
host 17.17.52.177 m34.mydomain.com
</virtual-machine>
我的脚本似乎忽略了&lt;和&gt;符号。
sed -e "/\(\<virtual-machine machine1\>\)/{:a;n;/<\/virtual-machine>/ba;i\\\n\ <virtual-machine machine-new\>\n\ host 1.2.3.4 m40.mydomain.com\n\ include /etc/virtuals/config.backoff\n\ <\\\virtual-machine\>" -e '}' file
我得到了输出:
<virtual-machine-pool mypool>
virtual-machine machine1
</virtual-mta>
<virtual-machine machine-new>
host 1.2.3.4 m40.mydomain.com
include /etc/virtuals/config.backoff
<\virtual-mta>
<virtual-machine machine1>
<virtual-machine machine-new>
host 1.2.3.4 m40.mydomain.com
include /etc/virtuals/config.backoff
<\virtual-machine>
host 17.17.52.177 m34.mydomain.com
</virtual-machine>
所需的输出是:
<virtual-machine-pool mypool>
virtual-machine machine1
</virtual-mta>
<virtual-machine machine1>
host 17.17.52.177 m34.mydomain.com
</virtual-machine>
<virtual-machine machine-new>
host 1.2.3.4 m40.mydomain.com
include /etc/virtuals/config.backoff
<\virtual-mta>
在我看来,我的脚本忽略了&lt;和&gt;然后两次找到匹配并将其放入两次。
这是在OSX上安装了gnu-sed --default-names
感谢您的任何建议或帮助。
约翰
答案 0 :(得分:1)
不要反斜杠sed中的尖括号。 \<
和\>
具有特殊含义:单词的开头和结尾。
答案 1 :(得分:0)
谢谢choroba。毕竟这确实有帮助。我不得不更换&lt; / virtual-machine&gt;用^ $。之后就开始工作了。