sed不匹配<或者>

时间:2014-10-09 12:21:02

标签: regex sed

我在配置文件中有这个:

<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

感谢您的任何建议或帮助。

约翰

2 个答案:

答案 0 :(得分:1)

不要反斜杠sed中的尖括号。 \<\>具有特殊含义:单词的开头和结尾。

答案 1 :(得分:0)

谢谢choroba。毕竟这确实有帮助。我不得不更换&lt; / virtual-machine&gt;用^ $。之后就开始工作了。