use*_*811 3 bash awk sed xml-parsing
我当前有一个包含以下内容的文件:
<refrigerator>
<food="watermelon" location="topShelf" />
<!--
<food="mango" location="bottomShelf" />
-->
<!--
<food="orange" location="middleShelf" />
-->
</refrigerator>
Run Code Online (Sandbox Code Playgroud)
我如何使用“sed”来删除<!--和-->取消注释“mango”?但是,如果文件中还有其他行被注释,我希望它们保持注释状态吗?
谢谢!
sed不是正确的工具(默认情况下不是多行),尝试使用perl,这更适合这种情况:
$ perl -i -0777 -pe 's/\s*<!--\s*\n(.*?food="mango".*?)\n\s*-->/\n$1/' file.txt
Run Code Online (Sandbox Code Playgroud)
<refrigerator>
<food="watermelon" location="topShelf" />
<food="mango" location="bottomShelf" />
<!--
<food="orange" location="middleShelf" />
-->
</refrigerator>
Run Code Online (Sandbox Code Playgroud)
-i切换就地编辑文件(就像sed -i)-0777一次性读取整个文件(也可以使用逐段-00读取)-p假设“while (<>) { ... }”循环程序,并打印换行符s///sed是类似替换的骨架\s对于 Perl 来说是一个空白字符.*?代表非贪婪匹配$1与 sed 相同\1(捕获的部分)看
perl -h