在Linux中执行diff时忽略asterix(*)

时间:2013-04-23 13:05:19

标签: linux diff

我正在尝试在Linux中使用标准diff命令,以便找到2个文件的差异。该文件的内容如下:

File1中

Jim
Jack
Tracy*
Michelle

文件2

Jim
Jack
Tracy
Michael

diff File1 File2给出了以下内容:

< Tracy*
< Michelle
---
> Tracy
> Michael

但是,我希望diff忽略asterix(*)并提供以下输出:

< Michelle
---
> Michael

有可能吗?

3 个答案:

答案 0 :(得分:4)

尝试

diff -I '*$' FILE1 FILE2
  

-I RE --ignore-matching-lines = RE

     

忽略其行符合RE

的更改

注意:这仅适用于行尾星号。

答案 1 :(得分:1)

使用ShinTakezou的方法,但这一次使用sed

diff <(sed 's/\*$//' file1) <(sed 's/\*$//' file2)

答案 2 :(得分:0)

如果使用不具有-I选项的差异,则可以将包含星形的行格式化为临时文件,然后区分临时文件。如果你正在使用bash,你可以使用&#34;两个管道&#34;,但如果你有它可能你也有使用-I选项的差异。无论如何它将是

sed 's/*$//' file1 >file1.temp
sed 's/*$//' file2 >file2.temp
diff file1.temp file2.temp

diff <(sed 's/*$//' file1) <(sed 's/*$//' file2)

(未经测试,但也可以在其他炮弹中使用)

注意 &#34;明星&#34;被删除,从差异的角度来看,它从未存在过。