按第二个文件的列表过滤文件的行

按第二个文件的列表过滤文件的行

file1.tabular包含超过 3 列的“元素”信息。

element1 235 oval red \
element2 334 oval red \
element3 356 rectangular blue

file2.txt包含单个列

element1\
element3

我想过滤file1.tabular并将它们另存为file3.tabular,它将仅包含 中的元素file2.txt,但包含 中的所有 3 列信息file1.tabular,例如

element1 235 oval red\
element3 356 rectangular blue

Ubuntu 上有解决这个问题的命令吗?我将不胜感激专家的帮助。谢谢

答案1

您可能正在寻找

grep -f file2.txt file1.tabular > file3.tabular

-f选项指示grep读取要从中查找的模式file2.txt。它将搜索应用于file1.tabular并将输出重定向到file3.tabular.

请注意,我假设您的文件中没有真正的“行继续”转义符(\所有行的末尾)。


注意:与基于正则表达式的搜索一样,在制定 的内容时需要小心file2.txt

  • 任何您想要字面匹配的正则表达式特殊字符都需要转义。
  • 另外,grep默认情况下将显示部分匹配(即仅匹配 中单词的子字符串的一个模式file1.tabular)。为了缓解这种情况,您可以使用-w开关仅允许“全字”匹配。

相关内容