是否有命令行工具可以从 XML 文件中删除注释?或者我需要编写一个使用 XML 解析器的小程序来执行此操作吗?
更新:我对仅处理所有可能的 XML 文件的子集的解决方案不感兴趣。
例如,正则表达式不能处理 XML 解析。
答案1
我会这样做:
cat myfile.xml | sed '/<!--.*-->/d' | sed '/<!--/,/-->/d' > cleaned.xml
或者:
awk 'in_comment&&/-->/{sub(/([^-]|-[^-])*--+>/,"");in_comment=0}
in_comment{next}
{gsub(/<!--+([^-]|-[^-])*--+>/,"");
in_comment=sub(/<!--+.*/,"");
print}'
或者:
xmlstarlet ed -d '//comment()' file.xml
答案2
扩展顶部答案。如果您只想删除注释而不是整行,则可能应该使用:
sed 's/<!--.*-->//'
就我而言,我有一个最小化的 XML 文件,其中整个内容都在一行中,并且由于以前的解决方案会删除注释所在的整行,因此它会完全清除我的文件。
答案3
这对于从 xml 中清除多行注释(如失败的测试)很有用,至少是你手工挑选的并且对最终用户有帮助的注释:
perl -i -w -0777pe 's/<!--(.(?<!(HELP|TODO)))*?-->//sg' somefile.xml
有关相关正则表达式的更多信息:https://stackoverflow.com/a/1240293/1422630
如果有办法使用 xmlstarlet 来获得相同的结果,我会更愿意使用,因为可能存在一些正则表达式无法处理的异常,但目前这是我必须使用的。