diff
有一個選項-I regexp
,它忽略只插入或刪除與給定正則表達式匹配的行的更改。在兩行之間進行更改(而不是插入或刪除行)時,我需要對此進行類比。如何忽略差異命令中的一些差異?
例如,我想忽略"abXd"
和"abYd"
之間的所有差異,給定的X
和Y
。
看來diff
還沒有這樣的能力。 diff
有沒有合適的替代品?
diff
有一個選項-I regexp
,它忽略只插入或刪除與給定正則表達式匹配的行的更改。在兩行之間進行更改(而不是插入或刪除行)時,我需要對此進行類比。如何忽略差異命令中的一些差異?
例如,我想忽略"abXd"
和"abYd"
之間的所有差異,給定的X
和Y
。
看來diff
還沒有這樣的能力。 diff
有沒有合適的替代品?
您可以通過sed
過濾這兩個文件,以消除您不關心的行。一般模式是/regex1/,/regex2/ d
刪除匹配兩個正則表達式的行之間的任何東西。例如:
diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)
假設X和Y是單個字符,那麼-I 'ab[XY]d'
適合我。
而對我來說太。 – user2023370 2013-09-16 20:46:04
這完全忽略了這條線。如果您關心的線路中存在其他差異,則會隱藏它們。 – CoatedMoose 2013-10-24 23:16:29
在改進了earlier solution約翰Kugelman:
diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)
可能是你可能會尋找!此版本將每行上的特定更改標準化,而不刪除行本身。這允許diff顯示任何其他仍然存在的差異。
你可以使用SED一個標準的字符串替換模式的實例:
diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)
感謝您的回答。 'sed'/ regex/d'file'刪除'file'中出現匹配'regex'的所有行。有沒有辦法刪除行,但只有它的匹配部分? – Vahagn 2010-12-14 07:41:21
我不確定你想要做什麼。你能用一個你想要區分的兩個文件的例子來編輯你的問題嗎?你想要結果是什麼? – 2010-12-14 16:58:35
不幸的是,這對於遞歸('-r')diff不起作用,原因很明顯。 – 2017-01-20 09:41:16