Perl命令行 - perl -pi -e

时间:2012-03-22 14:53:20

标签: perl

我正在尝试查找并替换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">

相同的行

提前致谢。

4 个答案:

答案 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'