【发布时间】:2016-08-15 23:59:12
【问题描述】:
我一直在尝试找到一种方法来使用 grep 比较文件,其中我也有我要比较的第一个文件的输出。
我拥有的文件是 Jenkins 插件列表,我正在尝试快速编译所有 Jenkins 实例之间的差异列表。 Jenkins 命令行的输出给出了一个短名称、长名称、插件版本。所以格式是这样的:
SupPlugin SuperPlugin 1.6 (1.8)
我有大约 8 个 Jenkins 实例,并且可以拉取插件列表。我需要做的是找到安装插件的不一致之处。我一直在玩弄 grep 和 diff 来尝试提取我需要的内容并存储它,以便我可以查看它并在需要的地方更新服务器。
我的 grep 命令是
grep -v output1.txt output2.txt output3.txt > list.txt
我遇到的问题是,虽然这给出了 1 与 2 相比的输出和 1 与 3 相比的输出,但它并没有输出 1 是什么。当发现不匹配时,我想在 grep 中获取当前行的输出,所以基本上我想从 1 以及 2 和 3 中获取一个列表,以便我可以比较版本。
我也一直在尝试使用差异并遍历每个文件来创建差异。由于这些本质上是集合,我想如果我最终尝试使用差异,我将不得不循环 1 与其余部分,然后 2 与其余部分,然后 3,等等......直到我创建了一个包含所有内容的文件的差异,但随后我将需要处理该文件以删除重复项并将格式更改为更具可读性。
有没有办法让 grep 做我想做的事,或者有更好的方法来使用 diff 来获得我想要得到的结果?
【问题讨论】:
-
(不确定为什么涉及“grep”(您的 grep 行缺少正则表达式。)如果您只想查看文件是否不同步,您可以执行以下操作:sum output1. txt output2.txt output3.txt 如果所有校验和都相同,那么文件很可能是相同的。可能是一个很好的第一次通过?)
-
我不需要知道文件是否相同,因为我知道会有差异。我需要的是一份差异列表,以及与我正在比较的原始文件的不同之处。 grep 实际上给了我我想要的大部分输出,但不包括 output1.txt 的输出。所以我从 1 中得到了 2 和 3 中的差异,但没有从 1 中找到不同的线。
标签: linux bash shell grep diff