比较两个 URL 列表并将新添加的 URL 打印到新文件

nei*_*ilH 8 command-line scripting bash diff

我最初生成两个包含 URL 列表的文件——我将它们称为oldnew。我想比较这两个文件,如果文件中有任何new不在文件中的URL old,我希望将它们显示在extra_urls文件中。

现在,我已经阅读了一些有关使用该diff命令的内容,但据我所知,这也分析了信息的顺序。我不希望订单对输出产生任何影响。我只想将额外的 URLnew打印到extra_urls文件中,无论它们在其他两个文件中的任何一个中放置的顺序如何。

我怎样才能做到这一点?

Bar*_*mar 14

您可以使用该comm命令来比较两个文件,并有选择地显示一个或另一个唯一的行,或共同的行。它要求对输入进行排序,但您可以使用流程替换对它们进行动态排序。

comm -13 <(sort old.txt) <(sort new.txt)
Run Code Online (Sandbox Code Playgroud)

如果您使用的版本bash不支持进程替换,则可以使用命名管道对其进行模拟。维基百科中显示了一个示例。


ter*_*don 6

我只会使用grep

grep -vFf old new > extra_urls
Run Code Online (Sandbox Code Playgroud)

解释

  • -f: 告诉grep从文件中读取其搜索模式。在这种情况下,old
  • -v : 告诉 grep 反转匹配,只打印不匹配的行。
  • -F: 告诉 grep 将其搜索模式解释为字符串,而不是正则表达式。这样,.URL 的 将逐字匹配。

结合起来,这些可以grep打印new不在old. 文件中 URL 的顺序无关紧要。

  • 您需要为纯文本模式添加`-F` (2认同)