如何使用BASH比较两个文本文件的相同的确切文字?

比方说,我有两个文本文件,我需要从中提取数据。 这两个文件的文本如下:

文件1:

1name - randomemail@email.com 2Name - superrandomemail@email.com 3Name - 123random@email.com 4Name - random123@email.com 

文件2:

 email.com email.com email.com anotherwebsite.com 

文件2是文件1的域名列表,从电子邮件地址中提取。 这些域名无论如何都是不一样的,而且是相当随意的。

我怎样才能得到与文件1中的文件2匹配的域名的结果?

先谢谢你!

Solutions Collecting From Web of "如何使用BASH比较两个文本文件的相同的确切文字?"

假设顺序无关紧要,

 grep -F -f FILE2 FILE1 

应该做的伎俩。 (这是因为一个鲜为人知的事实: grep-F选项并不仅仅意味着“匹配这个固定的字符串”,这意味着“匹配任何这些换行符分隔的固定字符串”)。

配方:

 join <(sed 's/^.*@//' file1|sort -u) <(sort -u file2) 

它会输出file1和file2中的所有域名的交集

请参阅BashFAQ / 036了解这类问题的常见解决方案列表。

使用VimDIFF命令,这给出了一个很好的差异

如果我得到了你的想法,你想过滤文件2中提到的主机的所有地址。

然后,您可以循环访问File 2和grep for @<line> ,将结果累积到一个新文件或类似的文件中。

例:

 cat file2 | sort -u | while read host; do grep "@$host" file1; done > filtered