複数の値を持つ複数のファイルを探しています。
例えば: 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
GNUにはgrep
次のオプションがあります-o
。
-o、--matchのみ
一致する行の一致する(空でない)部分のみが印刷され、各部分は別々の出力行に表示されます。
だからこれはあなたがしたいことをしなければなりません
grep -f filename.txt -R -H -o /home/*
-H
常にファイル名を印刷するために(-with-filename)も追加しました。