複数のファイルをgreppingしているとしますが、grepが現在検索しているファイルを表示する方法はありますか?grep検索はどのファイルですか?
例:
grep "*.log" file1 file2 file3 file4
が現在のgrepで、すなわちFILE1、FILE2、FILE3、などを検索し、この出力を表示されているファイルを判別することは可能ですか?
ありがとうございます!
複数のファイルをgreppingしているとしますが、grepが現在検索しているファイルを表示する方法はありますか?grep検索はどのファイルですか?
例:
grep "*.log" file1 file2 file3 file4
が現在のgrepで、すなわちFILE1、FILE2、FILE3、などを検索し、この出力を表示されているファイルを判別することは可能ですか?
ありがとうございます!
は確かに結果を含むファイルで結果を関連付けるための簡単な方法ですが、あなたは本当に、現在検索しているファイルgrep
あなたは、単にループでそれを呼び出すことができます表示する場合:
for f in file1 file2 file3 file4; do
echo "Searching $f"
grep "*.log" "$f"
done
これは、検索が始まる前にファイル名を表示します。
Downvoterは説明しなければなりませんか? Cb0はまもなく同じ回答を掲載しましたが、明らかに一般的な解決策です。 – dimo414
コメントで説明したように、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
は、入力ファイルのそれぞれにパターンマッチングを行う順序を観察することができます。
grep
に一致するものが表示されておらず、現在スキャンしているファイルを知りたい場合は、開いているファイルハンドルを調べるとよいでしょう。これはポータブルではありませんが、Linux上で、ファイルディスクリプタ3はあなたが
1234
が
grep
プロセスのPIDである
ls -l /proc/1234/fd/3
で行うことができ、調べたいものになると思われます。 --with-filename
を使用して
単純なループと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
[grepのドキュメント](HTTP読む:// WWWを.gnu.org/software/grep/manual/grep.html#Output-Line-Prefix-Control)、 '--with-filename'オプションを探します。 – larsks
あなたは "find。-name" * .log "-type f -exec grep"何か "{} \;"を試してみることができます – mebada