2

我想对两个 xml 文件进行比较,但忽略 2-3 行模式。

例如:假设我想在比较下面的 xml 格式时忽略可用性和价格。

这是我到目前为止所拥有的:

diff -I '^<PRICE>*' 1.xml 2.xml

<CATALOG>

    <PLANT>  
    <COMMON>Bloodroot</COMMON>  
    <BOTANICAL>Sanguinaria canadensis</BOTANICAL>  
    <ZONE>4</ZONE>  
    <LIGHT>Mostly Shady</LIGHT>  
    <PRICE>$2.44</PRICE>  
    <AVAILABILITY>031599</AVAILABILITY>  
    </PLANT>  
</CATALOG>

使用上面的差异,它跳过了价格,但我如何为这个正则表达式添加可用性?

4

2 回答 2

6

您是否再次尝试使用 -I?

这对我有用:

diff -I 'PRICE' -I 'AVAILABILITY' 1.xml 2.xml
于 2015-05-01T15:23:57.250 回答
1

运行文件grep -v以删除不需要的行,然后将diff它们删除,如下所示:

diff <(grep -vE "^(<PRICE>|<AVAILABILITY>)" 1.xml) <(grep -vE "^(<PRICE>|<AVAILABILITY>)" 2.xml)

<(...)语法称为Process Substitution。如果您的 shell 不支持它,您将不得不使用临时文件,如下所示:

$ grep -vE "^(<PRICE>|<AVAILABILITY>)" 1.xml > 1.new.xml
$ grep -vE "^(<PRICE>|<AVAILABILITY>)" 2.xml > 2.new.xml
$ diff 1.new.xml 2.new.xml

我不认为diff -I可以与多种模式一起使用。

于 2013-03-19T11:08:16.363 回答