
我有兩個文字文件,其中行的順序並不重要。我想找出一個文件中與另一個文件中不同的行。在 Linux 中使用 diff 可以找到差異,但也可以解釋同一文字行中的變化。
換句話說,如何進行行不敏感差異?
答案1
如果您的檔案不太大,您可以在 ingsort
之前將其刪除diff
。
所以這樣的事情會起作用:
sort file1 > file1_sorted
sort file2 > file2_sorted
diff file1_sorted file2_sorted
或者,正如您在評論中發現的那樣,您也可以在一行中完成,
diff <(sort file1) <(sort file2)
答案2
與diff
選項類似,您可以使用comm
帶有進程替換的命令並且sort
(comm
需要對其操作的檔案進行排序)。這將使您僅關注公共行,僅關註一個文件或另一個文件中的行,方法是使用-1
僅抑制第一個文件中的行,-2
僅抑制第二個文件中的行或-3
抑制兩個文件中的行,因此查看僅在第一個文件中而不是第二個文件中的所有行
comm -23 <(sort file1) <(sort file2)
當然,如果你願意,你也可以考慮使用grep
類似
grep -vFxf file2 file1
當 ( )中的行被視為必須符合整行 ( )的固定字串 ( ) 時,它將把 中 的行視為file2
模式,並且僅列印 file1 中沒有符合項 ( ) 的行。-v
-f
file2
-F
-x
此grep
解決方案的優點是不需要對檔案進行排序,但它只檢查一個檔案中不存在於另一個檔案中的行,而不是同時檢查兩個方向。