Diff
差異輸出中的驚嘆號是什麼意思?
我有一個學校作業。其中一部分是檢查文件的更改並將這些更改寫入日誌文件。到目前為止,我已經找到了
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
-當您只想知道兩個文件是否不同時。我從來沒有註意過(也許它也是一個“新”選項) - 但是當我的問題是遞歸搜尋兩個目錄樹之間不同的文件時,應該考慮一下。