Diff

差異輸出中的驚嘆號是什麼意思?

  • June 30, 2021

我有一個學校作業。其中一部分是檢查文件的更改並將這些更改寫入日誌文件。到目前為止,我已經找到了diff在我看來可能會有所幫助的命令。假設我有兩個文件,內容如下:

文件 1

orange
apple

文件2

orange
apple
strawberry

如果我diff -c file1 file2在這種情況下使用,命令的輸出是

*** file1   2016-11-24 08:31:19.424712242 +0100
--- file2   2016-11-24 08:25:24.604681751 +0100
***************
*** 1,2 ****
--- 1,3 ----
 orange
 apple
+ strawberry

我認為這表示需要將帶有“+”號的行添加到 file1 以使它們相同(?)。

現在假設我將 file1 更改為:

orange
apple
peach

的輸出diff -c file1 file2是:

*** file1   2016-11-24 08:34:50.647128312 +0100
--- file2   2016-11-24 08:25:24.604681751 +0100
***************
*** 1,3 ****
 orange
 apple
! peach
--- 1,3 ----
 orange
 apple
! strawberry

在這裡我迷路了,因為我不明白這些驚嘆號是什麼意思。突然間,diff 命令似乎沒那麼有用了。我試過查看 diff 命令的手冊頁,但找不到任何東西(也許我只是沒看到)。

  • diff -u

可能是您的任務所需要的。

以您為例並使用diff -u

michael@x071:[/home/michael]diff -u file?
--- file1       2016-11-24 07:48:41 +0000
+++ file2       2016-11-24 07:48:57 +0000
@@ -1,3 +1,3 @@
orange
apple
-peach
+strawberry

忠告 - RTM - 或 - 閱讀手冊。通常還有其他選擇。僅供參考: diff 的歷史選項(以及比較三個文件時的 diff3)有助於創建“程序輸入輸出”,將 file1 更改為 file2(或將 file2 更改回 file1)。這是所有“版本控制”軟體的基礎。

我很久以前記得的差異選項:

  • -e:以適合與 ed 編輯器一起使用的形式生成輸出,以將 File1 轉換為 File2。
  • -f:以不適合與 ed 編輯器一起使用的形式生成輸出,顯示將 File1 轉換為 File2 所需的修改,其順序與在-e標誌下生成的相反。
  • -n: 產生類似於-e標誌的輸出,但順序相反,並且在每個插入或刪除命令上都有更改的行數。這是修訂控制系統 (RCS) 使用的形式。

我要強調的最後一個選項是“新”選項——相對而言。(也有幾年的歷史,但通常不在 POSIX 實現中)。這不是創建適合“RCS”的“ed”的輸出,而是適用於patch

  • -u: 產生與三行統一上下文的差異命令比較。輸出類似於-c標誌的輸出,只是上下文行不重複;取而代之的是,上下文、刪除和添加的行交錯顯示在一起。

恕我直言:關鍵值diff -c是對命令的改進cmp-當您只想知道兩個文件是否不同時。我從來沒有註意過(也許它也是一個“新”選項) - 但是當我的問題是遞歸搜尋兩個目錄樹之間不同的文件時,應該考慮一下。

引用自:https://unix.stackexchange.com/questions/325657