使用'获取所有匹配项;grep-f';选项

使用'获取所有匹配项;grep-f';选项,grep,Grep,我想使用grep选项-f来查找一个文件('file1.txt')中的文本的所有匹配项,而另一个文件('file2.txt')中的所有匹配项都是使用grep选项-f来查找的,该选项指示从文件中读取要查找的表达式 “file1.txt” a a “file2.txt” a 当我运行命令时: grep-f file1.txt file2.txt-w 我只得到一次“a”的输出。相反,我希望得到它两次,因为它在我的“file1.txt”文件中出现两次。有没有办法让grep(或任何其他unix/linux)

我想使用grep选项-f来查找一个文件('file1.txt')中的文本的所有匹配项,而另一个文件('file2.txt')中的所有匹配项都是使用grep选项-f来查找的,该选项指示从文件中读取要查找的表达式

“file1.txt”

a

a

“file2.txt”

a

当我运行命令时:

grep-f file1.txt file2.txt-w

我只得到一次“a”的输出。相反,我希望得到它两次,因为它在我的“file1.txt”文件中出现两次。有没有办法让grep(或任何其他unix/linux)工具为它读取的每一行输出一个匹配项? 提前谢谢。 Arturo

当您使用

grep -f pattern.txt file.txt
这意味着匹配文件
file.txt
中的
pattern.txt
中找到的模式

它只给你一个输出,因为这就是第二个文件中的全部内容

尝试交换文件

grep -f file2.txt file1.txt -w

这是否回答了您的问题?

Grep按设计工作,只提供一条输出线。 您可以使用另一种方法:

while IFS= read -r pattern; do
    grep -e $pattern file2.txt
done < file1.txt
而IFS=read-r模式;做
grep-e$pattern file2.txt
完成

这将使用file1.txt中的每一行作为grep的模式,从而产生您正在寻找的输出。

文本的匹配-一些精确的文本?它应该逐行比较吗?是的,它包含精确匹配。我根据您的输入添加了-w选项。是的,这是一行一行的比较。我理解这一点,但我仍然想找到一种方法,每次在“file.txt”中找到“pattern.txt”中的模式(甚至是重复的模式)时打印匹配项。即使是一个工具或脚本而不是“grep-f”也足够了。这就成功了!。非常感谢。它甚至比我以前的grep命令快得多。