我正在尋找具有多個值的多個文件。
例如: 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) 來始終列印檔案名稱。