【问题标题】:Getting all the matches with 'grep -f' option使用 'grep -f' 选项获取所有匹配项
【发布时间】:2017-03-24 08:59:31
【问题描述】:

我想找到 所有 使用 grep 选项在另一个文件 ('file2.txt') 中找到的我在一个文件 ('file1.txt') 中的文本匹配项-f,表示从文件中读取要找到的表达式。

'file1.txt'

一个

一个

'file2.txt'

一个

当我运行命令时:

grep -f file1.txt file2.txt -w

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

【问题讨论】:

  • 文本的匹配项 - 一些确切的文本?它应该逐行比较吗?
  • 是的,它包含完全匹配。根据您的输入,我添加了 -w 选项。是的,是逐行比较。

标签: grep


【解决方案1】:

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

while IFS= read -r pattern; do
    grep -e $pattern file2.txt
done < file1.txt

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

【讨论】:

  • 成功了!谢谢你。而且它比我之前的 grep 命令还要快。
【解决方案2】:

当你使用时

grep -f pattern.txt file.txt

表示匹配文件file.txtpattern.txt中找到的模式。

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

尝试交换文件,

grep -f file2.txt file1.txt -w

这能回答你的问题吗?

【讨论】:

  • 我明白这一点,但我仍然想找到一种方法,每次在 'file.txt' 中找到来自 'pattern.txt' 的模式(甚至是重复的模式)时打印匹配项。甚至一个工具或脚本而不是“grep -f”就足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多