使用perl -p -ie注释以特定字符串开头的XML行

时间:2012-01-31 03:23:29

标签: xml perl replace comments

如何在XML文件中搜索以某个字符串开头的行,并使用 perl -pi -e / string / replacement / g'/ path / file 对其进行注释?我知道如何使用它进行基本的文本替换,但我不知道如何做到这一点。

具体来说,我想要注释掉所有阴影线:

<button function="close" state="prelight" draw_ops="close_focused_prelight"/>
<button function="close" state="pressed" draw_ops="close_focused_pressed"/>
<shadow radius="8.0" opacity="0.75" color="#abde4f" x_offset="1" y_offset="4"/>
<padding left="7" right="7" bottom="7"/>

<button function="close" state="prelight" draw_ops="close_focused_prelight"/>
<button function="close" state="pressed" draw_ops="close_focused_pressed"/>
<!--    <shadow radius="8.0" opacity="0.75" color="#abde4f" x_offset="1" y_offset="4"/> -->
<padding left="7" right="7" bottom="7"/>

3 个答案:

答案 0 :(得分:0)

s/^(<shadow .*)/<!-- $1 -->/mg;

答案 1 :(得分:0)

s/(<shadow .*?\/>)/<!-- $1 -->/

?表示非贪婪的匹配,以捕获直到'/&gt;'的任何字符,即使它不是一行中的唯一元素,它也应与阴影元素匹配。

我忘了你是在命令行上这样做的。我刚用测试输入验证了这一点。

perl -pi -e "s/(<shadow .*?\/>)/<\!-- \$1 -->/" /tmp/t

答案 2 :(得分:0)

Perl oneliner在终端之间的使用略有不同 阅读本文以获取更多信息Why doesn't my Perl one-liner work on Windows?

如果您没有指定操作系统,人们会假设您默认使用linux / unix。

对于Windows,请使用perl -pi.bak -e "s/(^<shadow .*>)/<!-- $1 -->/" theme.xml

对于linux perl -pi -e 's/(^<shadow .*>)/<!-- $1 -->/' theme.xml