320

grep出力で一致する行の前にファイル名を表示するにはどうすればよいですか?

4

6 に答える 6

6

この投稿のおかげで、なんとか達成できたこれはどうですか。

複数のファイルを検索したい場合、名前は異なるがパターン (例: filename=logfile.DATE) を持つログを、パターン (例: ) を持つ複数のディレクトリ内にあるとし/logsapp1, /logsapp2ます。各ファイルには grep したいパターン (例: "init time") があり"init time"、各ファイルの .

find ./logsapp* -name logfile* | xargs -I{} grep "init time" {} \dev\null | tee outputfilename.txt

次に、次のoutputfilename.txtようなものになります

./logsapp1/logfile.22102015: init time: 10ms
./logsapp1/logfile.21102015: init time: 15ms
./logsapp2/logfile.21102015: init time: 17ms
./logsapp2/logfile.22102015: init time: 11ms

一般に

find ./path_pattern/to_files* -name filename_pattern* | xargs -I{} grep "grep_pattern" {} \dev\null | tee outfilename.txt

説明:

findコマンドは、パターンに基づいてファイル名を検索します

次に、パイプxargs -I{}find出力を{}

これはの入力になりますgrep ""pattern" {}

grep次に、ファイル名を表示するためのトリック\dev\null

最後に、出力をファイルに書き込みますtee outputfile.txt

これは、grepバージョン 9.0.5 ビルド 1989 で機能しました。

于 2015-10-22T16:35:24.667 に答える
-7
grep 'search this' *.txt

すべての.txtファイルを検索するのに役立ちました(もちろん、独自の検索値を入力してください)。

于 2016-03-28T23:57:25.890 に答える