複数のパターンをgrepし、一致するパターンを含む結果を印刷する

複数のパターンを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)も追加したことに注意してください。

関連情報