【问题标题】:Ignore asterix(*) while doing diff in Linux在 Linux 中进行 diff 时忽略 asterix(*)
【发布时间】:2013-04-23 13:05:18
【问题描述】:

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

文件1

Jim
Jack
Tracy*
Michelle

文件2

Jim
Jack
Tracy
Michael

diff File1 File2 给了我以下信息:

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

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

< Michelle
---
> Michael

有可能吗?

【问题讨论】:

    标签: linux diff


    【解决方案1】:

    试试

    diff -I '*$' FILE1 FILE2
    

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

    忽略行都匹配 RE 的更改

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

    【讨论】:

    • 不起作用 ... diff -I '$' File1 File2 3,4c3,4 Tracy > Michael
    • -I 后面的星号是不是漏掉了?
    • 也许原因就在这里gnu.org/software/diffutils/manual/… --- 我试过了,没有错过星号,并确认它不能直观地按预期工作。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果您使用没有-I 选项的差异,您可以将包含星号的行grep 到临时文件中,然后对临时文件进行差异。如果你使用 bash,你可以使用“两个管道”,但如果你有它,你可能也有带有 -I 选项的差异。反正会的

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

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

      (未测试,但它也可以在其他 shell 中工作)

      注意 “星”被删除,从差异的角度来看,它从未存在过。

      【讨论】:

      • 无法正常工作。 grep -v 实际上会删除任何包含 asterix 的行,因此一个临时文件有 tracy 而另一个没有。我正在寻找一个选项来忽略 asterix。
      • 问错了问题...您有兴趣在最终差异中保留星号吗?如果没有,修复很容易。否则在飞行中我不知道,diff -I 分开
      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 2010-12-25
      • 2020-01-06
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2020-12-30
      相关资源
      最近更新 更多