如何区分两个文件并报告diff发生的部分?

时间:2010-03-18 13:37:01

标签: linux diff

我有两个文本文件,里面有几个部分。每个部分都有一个带有部分名称的标题(grep可以提取所有部分名称而不从文件中提取任何其他内容)。如何报告两个文件之间的差异并报告发生差异的部分?我还需要能够报告添加/缺失的部分。理想情况下,报告中根本不会提及相同的部分。

2 个答案:

答案 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'