我正在寻找具有多个值的多个文件。
例如: 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) 来始终打印文件名。