複数の値を持つ複数のファイルを 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)も追加したことに注意してください。