我想使用regex(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'
但这只删除了以
\n\n\n \n
\n\n
grep-v
将删除中间部分。
最后tr-d
将再次删除\0
。
在这种情况下,应该在比较之前将其应用于两个文件,例如:
diff <(sed 's/<!--/\x0<!--/g;s/-->/-->\x0/g' file1.xml | grep -zv '^<!--' | tr -d '\0') <(sed 's/<!--/\x0<!--/g;s/-->/-->\x0/g' file2.xml | grep -zv '^<!--' | tr -d '\0')
或更易读的函数:
stripcomments() {cat "$@" | sed 's/<!--/\x0<!--/g;s/-->/-->\x0/g' | grep -zv '^<!--' | tr -d '\0'}
diff <(stripcomments file1.xml) <(stripcomments file2.xml)
从理论上讲,CDATA块可能存在一些问题,因为它们可以用于不平衡的注释,并且它们具有重要的空字符的可能性更高,但我在现实生活中从未见过这样的xml文件。
因此,对于大多数有效的XML文件,这应该是可行的。