① linux diff 命令 比較兩個文件不看空格, 並行列印 的命令
的確會有這個問題,但嘗試了好一陣後發現,實際上也不是問題。
要解決此問題,加個選項--suppress-common-lines即可。
diff-wy--suppress-common-linesa.txtb.txt
或者:
sdiff-W--suppress-common-linesa.txtb.txt
為什麼說不是問題呢?看看下圖這個例子(a.txt中包含TAB和空格,b.txt里包含空格)。
得出的結論就是:
加了-y選項後,無論行內容是否相同都會列印。但注意看一下,行內容不相同的情況,兩端列印時中間會有一個豎線分隔。
加了-w選項後,比較結果其實是完全相同的,不存在有豎線分隔的兩端列印,從diff命令返回值(通過$?取得)也可以看出。
所以,想到用--suppress-common-lines選項抑制相同行的輸出。
② Linux文件比較命令的diff命令
1>diff命令的功能
linux中diff命令的功能為逐行比較兩個文本文件,列出其不同之處。它對給出的文件進行系統的檢查,並顯示出兩個文件中所有不同的行,不要求事先對文件進行排序。
2>語法
diff
[options]
file1
file2
該命令告訴用戶,為了使兩個文件file1和file2一致,需要修改它們的哪些行。如果用」-」表示file1或file2,則表示標准輸入。如果file1或file2是目錄,那麼diff將使用該目錄中的同名文件進行比較。
3>[options]主要參數
-a:將所有文件當作文本文件來處理。
-b或–ignore-space-change
忽略空格造成的不同。
-b或–ignore-blank-lines
忽略空行造成的不同。
-c:使用綱要輸出格式。
-h:利用試探法加速對大文件的搜索。
-i:忽略大小寫的變化。
-n
–rcs:輸出rcs格式。
-n或–new-file
在比較目錄時,若文件a僅出現在某個目錄中,會顯示:only
in目錄;文件a若使用-n參數,則diff會將文件a與一個空白的文件比較。
-r或–recursive
比較子目錄中的文件。
-u,-u<列數>或–unified=<列數>
以合並的方式來顯示文件內容的不同。
4>使用方法的實例說明
例如:
diff
/usr/xu
mine
把目錄/usr/xu
中名為mine的文件與當前目錄中的mine文件進行比較。
通常輸出由下述形式的行組成:
n1
a
n3,n4
n1,n2
d
n3
n1,n2
c
n3,n4
這些行類似ed命令把filel轉換成file2。字母(a、d和c)之前的行號(n1,n2)是針對file1的,其後面的行號(n3,n4)是針對file2的。字母a、d和c分別表示附加、刪除和修改操作。
在上述形式的每一行的後面跟隨受到影響的若干行,以」<」打頭的行屬於第一個文件,以」>」打頭的行屬於第二個文件。
diff能區別塊和字元設備文件以及fifo(管道文件),不會把它們與普通文件進行比較。
如果file1和file2都是目錄,則diff會產生很多信息。
5>diff最常用的功能
diff有很多功能平時我們不常用到,最常用的功能莫過於生成patch文件了:
diff
-urn
old/
new/
>
mysoft.patch
參數
-u
表示使用
unified
格式,-r
表示比較目錄,-n
表示將不存在的文件當作空文件處理,這樣新添加的文件也會出現在patch文件中。
然後在需要應用patch的地方使用下述命令即可:
patch
-p0
<
mysoft.patch
diff的
-y
命令(長格式為
–side-by-side)可以將屏幕分成左右兩部分,來比較兩個文件之間的差異。許多圖形化的比較工具都有這個功能,但如果只能使用命令行,這個參數就相當有用了。如果要改變左右各部分的寬度,可以通過
-w
(–width)參數來指定。
–ignore-blank-lines
參數可以不檢查空白行。這樣dos格式和unix格式的文件互相比較時,就不至於因為換行符不一致而出現大量的差異。
③ Linux 基礎教程 11-基本命令diff和comm
diff命令主要用來比較文件的差異。diff會以逐行的方式比較文本文件的差異,如果指定比較的是目錄,則diff會比較目錄中相同文件名的文件,但不會比較其子目錄。
主要參數如下所示:
second.txt
comm命令主要用於比較兩個 已經排過序 的文件。
主要參數如下所示:
comm在對比文件前 一定要先排序 ,否則會出現報錯提示,以上面diff示例的中的first.txt和second.txt為例
④ shell 命令 diff 的使用簡介
diff 命令是 Linux 上比較重要的命令行工具,用於比較文本內容,並找到不相同的地方, diff 在命令行中列印每一行的改動之處。 diff 程序的輸出被稱為補丁( patch ),在 Linux 系統中還有一個 patch 程序,可以根據 diff 的輸出,將文件內容更新為另一個文件內容, diff 是版本控制工具不可或缺的一部分。
diff 命令能比較單個文件或者目錄內容。
如果指定比較的是文件,則只有當輸入為文本文件時才有效。以逐行的方式,比較文本文件的異同處。
如果指定比較的是目錄的的時候, diff 命令會比較兩個目錄下名字相同的文本文件。列出不同的二進制文件、公共子目錄和只在一個目錄出現的文件。
diff 的 normal 顯示格式有三種提示:
上面的 「3c3」 和 「8c8」 表示 log2014.log 和 log20143.log 文件在 3 行和第 8 行內容有所不同; "11,12d10" 表示第一個文件比第二個文件多了第 11 和 12 行。
「|」表示前後 2 個文件內容有不同
「<」表示後面文件比前面文件少了 1 行內容
「>」表示後面文件比前面文件多了 1 行內容
這種方式在開頭兩行作了比較文件的說明,這里有三中特殊字元:
「+」 比較的文件的後者比前著多一行
「-」 比較的文件的後者比前著少一行
「!」 比較的文件兩者有差別的行
它的第一部分,也是文件的基本信息:
--- log2014.log 2012-12-07 18:01:54.000000000 +0800
+++ log2013.log 2012-12-07 16:36:26.000000000 +0800
"---"表示變動前的文件,"+++"表示變動後的文件。
第二部分,變動的位置用兩個@作為起首和結束。
@@ -1,12 +1,10 @@
前面的 "-1,12" 分成三個部分:減號表示第一個文件(即 log2014.log ),"1"表示第 1 行,"12"表示連續 12 行。合在一起,就表示下面是第一個文件從第 1 行開始的連續 12 行。同樣的, "+1,10" 表示變動後,成為第二個文件從第 1 行開始的連續 10 行。
⑤ shell中diff命令的返回值我怎麼才能獲取
1.$?可以獲取到diff的返回值
2.之所以列印不出echo different大致有兩個原因
case 1:兩個目錄內容不一樣,無法進入循環
case 2:仔細檢查語法錯誤,是否遺漏空格
⑥ 收藏 急!shell中diff命令的返回值我怎麼才能獲取到呢
將if [ $? -ne 0 ] ;改為if [ $? -eq 0 ] ; 你再試試。
在linux中上一條命令執行成功時$?的值為0
⑦ Linux sed 下面這行代碼誰能解釋下
執行sed -i.bak "$1" $2
-i代表直接在源文件修改,但是源文件備份為.bak
$1是處理程序變數
$2是文件名變數
————————————
執行diff $2 ${2}.bak > /dev/null 2>&1
diff $2 ${2}.bak就是對比源文件和備份的文件,$2是源文件(修改過的),${2}.bak就是未修改的備份的文件。
> /dev/null代表把diff的輸出重定向到null,不會在終端顯示。
2>&1代表把diff的錯誤重定向到輸出,也會到null,不在終端顯示。
————————————
$?代表上一句命令,也就是diff命令的返回值。如果是0,說明修改後的源文件和以前的文件相同,根本沒有改變,就輸出sed失敗。不是0說明不同,輸出sed成功。
⑧ Ubuntu下怎麼查diff的返回值
聽說ubuntu是可以查看源代碼的,是最底層的那種!也就是用C或C++寫的那...
答:下面以查看ls這個命令的源代碼為例: 1.輸入 which ls liuwei@liuwei:~/test$ which ls /bin/ls 2.輸入sudo dpkg -S /bin/ls liuwei@liuwei:~/test$ sudo dpkg -S /bin/ls coreutils: /bin/ls 3.輸入sudo apt-get source coreutilsliuwei@liuwei...
⑨ 計算機編程中的diff是什麼意思
diff 命令比較文本文件。它能比較單個文件或者目錄內容。
注:
diff 命令只有當輸入為文本文件時才有效。
如果指定了 Directory1 和 Directory2 參數,diff 命令比較兩個目錄下名字相同的文本文件。列出不同的二進制文件、公共子目錄和只在一個目錄出現的文件。 當 diff 命令運行於常規文件時,且當目錄比較期間比較不同的文本文件時,diff 命令顯示文件中哪些行必須更改以保持它們一致。如果 File1 和 File2 參數都不是目錄,其中之一可能給定負號「-」,以採用標准輸入。如果 File1 參數是目錄,則使用目錄中與 File2 參數指定的文件名一致的那個文件。
⑩ shell怎麼判斷兩個文件內容是否相同
#cat diff_two_file
#/bin/sbin
file1=/mnt/mmc/test/aa
file2=/mnt/mmc/test/bb
diff $file1 $file2 > /dev/null
if [ $0 == 0 ]; then
echo "Both file are same"
else
echo "Both file are different"
fi
$0 是上一執行命令的返回值。
diff 命令返回值為 0,說明兩個文件相同, 否則兩個文件不相同。