如何在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"/>
答案 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