我有兩個文本文件,其中有幾個部分。每個部分都有一個包含部分名稱的標題(grep可以提取所有部分名稱,而無需從文件中提取任何其他內容)。如何報告兩個文件之間的差異並報告差異發生的部分?我還需要能夠報告添加/缺失部分。理想情況下,報告中根本不會提及相同的部分。如何區分兩個文件並報告差異發生的部分?
2
A
回答
1
如果您在頭文件中引入了一個虛假更改,那將會強制它們顯示在diff中。不完全是你想要的,但也許這會給你一個想法。
假設你尋找頭正則表達式是^HEAD
:
sed -e 's/^HEAD/>HEAD/' file1.txt | diff -u - file2.txt
編輯:如果你想要得到的差異是一個真正的差異,你可以使用sed
刪除水頭差線。
sed -e 's/^HEAD/>HEAD/' file1.txt | diff -u - file2.txt | sed -e 's/^->HEAD/ HEAD/; /^+HEAD/D'
+0
這給了我一個走向的想法,但你的第二個例子仍然在輸出中留下了一些上下文。到目前爲止,我還沒有能夠刪除這些上下文的行 - 即使使用diff'-U 0'選項。我會再補充一點。 – Les 2010-03-22 14:09:33
2
使用diff
的--show-function-line
參數:
diff -U 0 --show-function-line='^HEAD ' old-file new-file
,如果你在末尾添加一個新的部分,不會,如果它apears只在輸出文件(例如報告正確的部分該文件,添加的行將顯示爲舊文件的最後一部分)。
下面的腳本可能會有所幫助,儘管它遠非單線程。它會打印:
- 部分從已經刪除的行舊文件,從已插入的行新的文件
" -"
- 段前綴,與
" +"
- 刪除線(包括已刪除的章節標題)前綴與
"+"
- 插入線(包括新的部分標頭)中,用
"-"
他前綴的前綴re是腳本:
#!/bin/bash
# Usage : ./script old-file new-file
diff \
--new-line-format='+%dn'$'\n' \
--old-line-format='-%dn'$'\n' \
--unchanged-line-format='' \
$1 \
$2 \
| \
(
lnumOld=0;
lnumNew=0;
header='NO HEADER'
printheader=1
while read lprint; do
if [ "$((lprint))" -gt 0 ]; then
sep='+'
while [ $lnumNew -lt $lprint ]; do
read line <&4
if [ "${line#HEAD }" != "$line" ]; then
header="$sep$line"
printheader=1
fi
((lnumNew++));
done
else
sep='-'
while [ $lnumOld -lt $((-1*$lprint)) ]; do
read line <&3
if [ "${line#HEAD }" != "$line" ]; then
header="$sep$line"
printheader=1
fi
((lnumOld++));
done
fi
if [ $printheader = 1 ]; then
echo " $header"
printheader=0
fi
echo "$sep$line";
done) 3<"$1" 4<"$2"
相關問題
- 1. 差異報告分類器
- 2. 比較兩個文本文件並返回差異(不區分大小寫)
- 3. 在兩個分支合併差異
- 4. 如何區分兩個文件,但忽略Perl/C/C++註釋中的差異?
- 5. 如何計算sql報告中的百分比差異2008
- 6. 差異報告
- 7. 僅在兩個文件之間發生差異時才發送差異輸出
- 8. Python差異並獲得新的部分
- 9. 兩個文本文件之間的百分比差異
- 10. 差異/合併兩個文件
- 11. 一個報告中的多個部分
- 12. 如何讓Mercurial忽略文件各部分的差異?
- 13. 如何比較兩個visio文件並報告它們之間的區別?
- 14. Google Analytics(分析)報告的位置與IP地址報告之間的差異
- 15. 分發循環的回報兩個部分
- 16. Github如何生成小分支差異?
- 17. 獲取兩個不同分支中文件的差異
- 18. 計算兩個HTML文件的百分比差異
- 19. 如何顯示兩個文件之間的合併差異?
- 20. 區分和突出顯示兩個字段之間的差異
- 21. 客戶端工作區中兩個分支之間的差異
- 22. 如何生成Clearcase UCM中兩條基線之間的差異報告?
- 23. 如何比較兩個工作表並生成差異報告作爲第三個工作表?
- 24. 如何使用VS 2012插入報告部分離子報告
- 25. 如何刪除SSRS報告標題部分drildown移動報告
- 26. 如何區分Eclipse中相同文件的兩個區域
- 27. 比較兩個csv文件並發現差異
- 28. 產生兩個分支之間的差異,初步審覈後
- 29. 如何區分兩個表
- 30. 如何區分兩個Time.now.utc.iso8601?
你可以得到以'grep -n'開頭的行號,並用'diff'獲取更改,同時也包含行號。在腳本中匹配它們不應該那麼困難。 – 2010-03-18 15:25:51
順便說一句 - 你想要一個統一的差異,對吧? – leedm777 2010-03-19 21:39:59