我需要仅使用linux命令行比较两个文本文件,以获取添加的行列表,删除的行和修改的行。我目前使用diff --context=0
,但是如果某行是“已修改”且以下行是“已添加”,则这两行将在单个更改集中标记为“已修改”(而不是两个更改集:'已修改'对于第一个和'添加'为第二个。)
以下是文件示例:
文件#1:
foo line1
文件#2:
fooX line1
bar line2
目前使用的命令:
diff --minimal --context=0 file1 file2
实际结果:
! foo line1
--- 1 ----
! fooX line1
! bar line2
需要的结果:
! foo line1
--- 1 ----
! fooX line1
+ bar line2
我希望--minimal
可以胜任,但事实并非如此。它似乎发现更少的更改集而不是像我需要的更小的更改集。如果我在第一行之后插入一个只包含“ - ”的新行,它确实有效,但我必须比较的文件非常大,我真的不想在每行之间插入“ - ”。
答案 0 :(得分:0)
由于diff
没有合适的解决方案,我生成了:
diff --context=0 file1 file2 | grep "^\!"
然后我通过删除已删除/添加的所有行来过滤第三个文件的输出:
while read line
do
if ! ( grep -q -- "$line" $ADDED_LINES_FILE $REMOVED_LINES_FILE) ; then
echo "$line"
fi
done < diff_output > $TMP_FILE
mv $TMP_FILE diff_output