2016-06-27 5 views
0

複数のファイルをgreppingしているとしますが、grepが現在検索しているファイルを表示する方法はありますか?grep検索はどのファイルですか?

例:

grep "*.log" file1 file2 file3 file4 

が現在のgrepで、すなわちFILE1、FILE2、FILE3、などを検索し、この出力を表示されているファイルを判別することは可能ですか?

ありがとうございます!

+0

[grepのドキュメント](HTTP読む:// WWWを.gnu.org/software/grep/manual/grep.html#Output-Line-Prefix-Control)、 '--with-filename'オプションを探します。 – larsks

+0

あなたは "find。-name" * .log "-type f -exec grep"何か "{} \;"を試してみることができます – mebada

答えて

-1

は確かに結果を含むファイルで結果を関連付けるための簡単な方法ですが、あなたは本当に、現在検索しているファイルgrepあなたは、単にループでそれを呼び出すことができます表示する場合:

for f in file1 file2 file3 file4; do 
    echo "Searching $f" 
    grep "*.log" "$f" 
done 

これは、検索が始まる前にファイル名を表示します。

+0

Downvoterは説明しなければなりませんか? Cb0はまもなく同じ回答を掲載しましたが、明らかに一般的な解決策です。 – dimo414

1

コメントで説明したように、grepには、これにはオプション-Hがあります。 manページから、

-H, --with-filename 
      Print the file name for each match. This is the default when there is more than one file to search. 

は、あなたがする必要があるのはgrep -H "*.log" file1 file2 file3 file4として、あなたのコマンドにフラグを追加し、あなたがgrepは、入力ファイルのそれぞれにパターンマッチングを行う順序を観察することができます。

0

grepに一致するものが表示されておらず、現在スキャンしているファイルを知りたい場合は、開いているファイルハンドルを調べるとよいでしょう。これはポータブルではありませんが、Linux上で、ファイルディスクリプタ3はあなたが

1234grepプロセスのPIDである
ls -l /proc/1234/fd/3 

で行うことができ、調べたいものになると思われます。 --with-filenameを使用して

0

単純なループとglobstarを使ってすべてのファイルを実行し、その名前をエコーし​​てパターンにgrepすることができます。これは、その結果が表示されます

for file in ** 
do 
    echo "searching $file" 
    grep "$pattern" "$file" 
done 

:あなたが唯一の特定のファイルを検索したい場合は

searching file1 
LINE_WITH_PATTERN 
searching file2 
searching file3 
LINE2_WITH_PATTERN 

...

for file in file1 file2 file3 file4 
関連する問題