如何使用diff排除多个线条图案?

时间:2013-03-19 11:02:02

标签: regex unix diff

我想在两个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>

使用上面的差异,它会降低价格,但如何为此正则表达式添加可用性?

2 个答案:

答案 0 :(得分:4)

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

这对我有用:

diff -I 'PRICE' -I 'AVAILABILITY' 1.xml 2.xml

答案 1 :(得分: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不能用于多种模式。