gpt4 book ai didi

具有最小匹配的 Linux diff

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:01 27 4
gpt4 key购买 nike

我需要仅使用 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 可以完成这项工作,但事实并非如此。它似乎找到了更少的变更集,而不是我需要的更小的变更集。如果我在第一行之后插入一个仅包含“--”的新行,它确实有效,但我必须比较的文件非常大,我真的不想在每一行之间插入“--”。 .

最佳答案

由于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

关于具有最小匹配的 Linux diff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22687728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com