unix 如何使用grep将子字符串从一个文件匹配到另一个文件?

hmtdttj4  于 2022-11-04  发布在  Unix
关注(0)|答案(2)|浏览(228)

我有两个文件。文件1有一堆电子邮件地址。文件2有域列表。
我想查找与域匹配的所有电子邮件地址(以及不匹配的电子邮件地址)
如果有人请让我知道我们如何才能做到这一点使用'grep'从终端。

  1. File1.csv
  2. abc@gmail.com
  3. abc@fmail.com
  4. abc@fb.com
  5. abc@hotmail.com
  6. abc@outlook.com
  7. abc@live.com
  8. File2
  9. hotmail.com
  10. live.com
  11. fb.com
  12. The output should be (and non-matching as well)
  13. abc@fb.com
  14. abc@hotmail.com
  15. abc@live.com
  16. Please consider the email file is too big and contains 2M emails to compare against 6k domains.
kzmpq1sx

kzmpq1sx1#

您可以使用-f从文件中读取模式:

  1. grep -f File2 File1.csv
v9tzhpje

v9tzhpje2#

在您的评论中,您尝试匹配以下固定模式:@
在这种情况下,您可能需要在File2中每行的开头添加@,以便将其用作固定模式。
您可以通过以下方式执行此操作:
1.使用sed命令将@添加到file2.txt中每行的开头。

  1. $ sed 's/^/@/' file2.txt > new-file.txt

不要担心,不会错过与您的主文件,你说这是约2 M字段,我们正在保存输出到另一个文件名为new-file.txt
1.使用new-file.txt文件运行-f选项grep命令,如下所示:

  1. $ grep -f newfile.txt File1.csv

相关问题