複数のパターンを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

GNUにはgrep次のオプションがあります-o

-o、--matchのみ

一致する行の一致する(空でない)部分のみが印刷され、各部分は別々の出力行に表示されます。

だからこれはあなたがしたいことをしなければなりません

grep -f filename.txt -R -H -o /home/*

-H常にファイル名を印刷するために(-with-filename)も追加しました。

関連情報