grep 多个模式并使用匹配模式打印结果

grep 多个模式并使用匹配模式打印结果

我正在寻找具有多个值的多个文件。 例如: grep -f filename.txt /home/* -R
(filename.txt包含多个值)

但是,我需要知道哪个文件包含哪个值。
例如:/home/blah.txt包含value1,/home/aaa.txt包含value2等。

有什么建议么?

答案1

您可以使用 提供的一些标志来执行此操作grep

您可以尝试以下命令:

grep -R -f filename.txt /home/*将搜索文件中的任何模式filename.txt并将其与主文件夹中的所有文件递归匹配。你会得到这样的输出:

#here my filename contains the entries bash and Bingo
$grep -R -f filename.txt /home/*
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:awk -v RS=END_WORD '/Bingo1/ && /Bingo2/' test2.txt | grep -o 'Pokeman.*'

grep将输出文件名和包含模式的整行。

如果您只想显示找到的模式,请尝试以下命令:

#here the -o flag only displays the matched values, and -n adds the line number
$grep -R -o -n -f test /home/*
/home/user/.bash_history:128:bash
/home/user/.bash_history:156:bash
/home/user/.bash_history:193:Bingo

答案2

这应该适合您的情况:

grep -HRnF '<pattern>' . --include "<file_name>"

因此,要在所有以 .txt 结尾的文件中搜索单词“test”,请使用以下命令:

grep -HRnF 'test' . --include "*.txt"

答案3

GNUgrep有选项-o

-o, --仅匹配

仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

所以这应该做你想做的

grep -f filename.txt -R -H -o /home/*

注意我还添加了-H(-with-filename) 来始终打印文件名。

相关内容