我有两个文本文件,里面有几个部分。每个部分都有一个带有部分名称的标题(grep可以提取所有部分名称而不从文件中提取任何其他内容)。如何报告两个文件之间的差异并报告发生差异的部分?我还需要能够报告添加/缺失的部分。理想情况下,报告中根本不会提及相同的部分。
答案 0 :(得分:2)
使用diff
的{{1}}参数:
--show-function-line
如果它仅在输出文件中出现,则不会报告正确的部分(例如,如果在文件末尾添加了新部分,则添加的行将显示为旧文件的最后一部分)。
以下脚本可能会有所帮助,尽管它远不是一个单行。它会打印出来:
diff -U 0 --show-function-line='^HEAD ' old-file new-file
" -"
" +"
"+"
这是脚本:
"-"
答案 1 :(得分:1)
如果你在标题中引入了一个人为的变化,那将迫使它们出现在差异中。不完全是你想要的,但也许这会给你一个想法。
假设您找到标题的正则表达式是^HEAD
:
sed -e 's/^HEAD/>HEAD/' file1.txt | diff -u - file2.txt
编辑:如果您希望生成的差异是真正的差异,可以使用sed
删除HEAD差异线。
sed -e 's/^HEAD/>HEAD/' file1.txt | diff -u - file2.txt | sed -e 's/^->HEAD/ HEAD/; /^+HEAD/D'