我想使用正则表达式(awk、sed、grep...)删除 bash 中的 XML 注释
我看过有关此问题的其他问题,但他们遗漏了一些东西。这是我的 xml 代码
<Table>
<!--
to be removed bla bla bla bla bla bl............
removeee
to be removeddddd
-->
<row>
<column name="example" value="1" ></column>
</row>
</Table>
所以我正在比较 2 个 xml 文件,但我不希望比较考虑到注释。我这样做
diff file1.xml file2.xml | sed '/<!--/,/-->/d'
但这只会删除以开头的行<!--
和最后一行。它不会删除之间的所有线条。
最后,您必须向您的客户/朋友/讲师推荐他们需要安装某种 XML 处理器。xmlstarlet
是一个很好的命令行工具,但是有任意数量(或至少大于 2 的数量)的 XSLT 实现可以为任何标准 Unix 进行编译,并且在大多数情况下也可以为 Windows 进行编译。您确实无法使用基于正则表达式的工具进行大量 XML 处理,并且无论您做什么都将难以阅读、难以维护,并且可能在极端情况下失败,有时会带来灾难性的后果。
我没有花很多时间来完善或审查下面的 awk 小程序。我认为它会从兼容的 xml 文档中删除注释。注意下面的评论是not符合:
<!-- XML comments cannot include -- so this comment is illegal -->
我的脚本不会正确处理它。
以下内容也是非法的,但由于我在野外见过它而且并不难处理,所以我这样做了:
<!-------------- This comment is ill-formed but... -------------->
这里是。没有保证。我知道它很难阅读,而且我不想维护它。它很可能在任意极端情况下失败。
awk 'in_comment&&/-->/{sub(/([^-]|-[^-])*--+>/,"");in_comment=0}
in_comment{next}
{gsub(/<!--+([^-]|-[^-])*--+>/,"");
in_comment=sub(/<!--+.*/,"");
print}'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)