sed - 比较 2 个相似的文件,只输出差异,保留它们出现的顺序?

标签 sed diff comm

希望有人能帮我解决这个问题

我有 2 个文件,一个是 325 行长,一个是 361 行长。

这些文件的大部分内容相同,但第二个文件随机插入了额外的行。我只对额外的行感兴趣,我需要保留它们在文件中出现的顺序。

这些文件包含一个大约 31 行的重复段落 - 我知道这一段的第一行和最后一行,并且删除整个段落没有问题,但无法弄清楚如何。

即文件1

The quick brown
fox jumped 
over the
lazy dog
The quick brown
fox jumped
over the
lazy dog
The quick brown
fox jumped
over the
lazy dog

即文件2
The quick brown
fox jumped
over the
lazy dog
sadhasdgh
qyyutrytkdaslksad
utyiuiytiuyo
The quick brown
fox jumped
over the
lazy dog
djakdjhgmv
asdjkljkgfyiyi
The quick brown
fox jumped
over the
lazy dog
jghytpuptou

我只需要按以下顺序输出额外的行:
sadhasdgh
qyyutrytkdaslksad
utyiuiytiuyo
djakdjhgmv
asdjkljkgfyiyi
jghytpuptou

任何帮助或建议将不胜感激,不幸的是,我不是 *nix 人 :(
我尝试了一些 diff 表达式和 comm 表达式,但无法得到我需要的。

最佳答案

试试这个神奇的命令:

diff file1.txt file2.txt | sed -n 's/^> \(.*\)/\1/p'
diff file1.txt file2.txt应该输出类似的东西
2c2
< fox jumped 
---
> fox jumped
4a5,7
> sadhasdgh
> qyyutrytkdaslksad
> utyiuiytiuyo
8a12,13
> djakdjhgmv
> asdjkljkgfyiyi
12a18
> jghytpuptou
sed -n 's/^> \(.*\)/\1/p'应该找到以 > 开头的行并输出没有 > 的行.这不起作用的可能原因是系统中 diff 的不同输出?

关于sed - 比较 2 个相似的文件,只输出差异,保留它们出现的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579546/

相关文章:

c - 如果 diff 命令导致 bash 没有差异,如何输出 'passed'?

bash - 如何在不排序的情况下删除两个文件之间的公共(public)行?

linux - Unix - 通过匹配前 91 个字符来获取文件 2 中不在文件 1 中的记录

bash - 如果 "grep -f file"具有空分隔项,如何使用 "file"?

bash - 用另一个文件中的行替换文件中的几行

macos - 使用 sed 执行递归查找和替换仅更改第一个文件

linux - Bash 命令行参数通过 ssh 传递给 sed

linux - 在不换行的情况下将文本附加到文件

linux - 如何创建补丁以删除文件夹并使用 diff 创建新文件夹?

php - 比较两个目录,哪个目录具有每个文件的最新版本?