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) 來始終列印檔案名稱。

相關內容