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

时间:2012-10-13 02:13:37

标签: linux bash text grep compare

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

文件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匹配的域名的结果?

提前谢谢!

5 个答案:

答案 0 :(得分:8)

假设订单无关紧要,

grep -F -f FILE2 FILE1

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

答案 1 :(得分:2)

食谱:

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

它将输出file1和file2

中所有域名的交集

答案 2 :(得分:1)

有关此类问题的常见解决方案列表,请参阅BashFAQ/036

答案 3 :(得分:1)

使用VimDIFF命令,这可以很好地呈现差异

答案 4 :(得分:0)

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

然后你可以循环遍历File 2并grep @<line>,将结果累积到新文件或类似内容中。

示例:

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