我正在尝试查找并替换xml文档中的字符串
这是我正在使用的代码:
perl -pi -e s/xmlNamespaceAware=\"false\"">"/xmlNamespaceAware=\"false\"">""<"Alias">"hostname"<"/Alias">"/g
错误:
syntax error at -e line 1, near "s/xmlNamespaceAware="false">/xmlNamespaceAware="false"><Alias>webtctdm1.ecorp.cat.com</Alias"
如果我删除/ in它可以正常工作。
无论如何,我可以在换行符上写"<"Alias">"hostname"<"/Alias">"
,反对与xmlNamespaceAware="false">
提前致谢。
答案 0 :(得分:4)
让您的生活更轻松,并在处理HTML / XML时选择/
以外的分隔符。
使用换行文字:
perl -pi -e '
s{xmlNamespaceAware="false">}
{xmlNamespaceAware="false">
<Alias>hostname</Alias>}g' *.xml
使用换行转义字符:
perl -pi -e '
s{xmlNamespaceAware="false">}
{xmlNamespaceAware="false">\n<Alias>hostname</Alias>}g' *.xml
两者都是这样做的。
答案 1 :(得分:4)
为方便起见,您可以使用\K
转义字符。它将保留前面的字符串,就像一个环视断言。我也使用#
作为替换正则表达式的分隔符,以避免必须转义斜杠。
perl -pi -e 's#xmlNamespaceAware="false">\K#\n<Alias>hostname</Alias>#g'
答案 2 :(得分:2)
这是一个毫无希望的字符串混乱。您已经忘记了逃避某些"
,/
中的</Alias>
实际上终止了正则表达式。为什么不使用单引号字符串来保存整个内容?
perl -pi -e 's/xmlNamespaceAware="false">/xmlNamespaceAware="false"><Alias>hostname<\/Alias>/g'
答案 3 :(得分:0)
我认为这应该为你做,但我没有可以试用的Linux盒子。使用pipe作为s///
的分隔符可以避免转义斜杠的需要。
perl -pi -e 's|xmlNamespaceAware="false">|xmlNamespaceAware="false">\n<Alias>hostname</Alias>|g'