回答:
grep
ファイル名を表示するために、この小さなトリックを試して、複数のファイルを扱っていると思い込ませてください。
grep 'pattern' file /dev/null
行番号も取得するには:
grep -n 'pattern' file /dev/null
/dev/null
このコマンドに追加することの重要性を教えていただけますか?
grep
複数のファイル名が指定されている場合は、一致する前のファイル名が自動的に表示されますが、入力ファイルが1つの場合はファイル名が省略されます。使用することにより/dev/null
、余分な入力ファイルとしてgrep
「思う」それは、複数のファイルを扱うが、もちろん空のそれが一致リストに表示されませんので、は/ dev / nullは、..です
-H
grep のオプションはPOSIXの一部ではなく、使用されているOSはSolaris 10です。標準のgrepもPOSIX準拠のバージョンのgrepもこの-H
オプションを備えていません。
find . -name foo -exec grep pattern {} \;
指定さfoo
れたファイルがたくさんあるとしてfind
もgrep
、一度に1つのファイルを操作するだけです。この/dev/null
トリックは、私が試したすべてのlinux / osxフレーバーで機能するようです。注意してください-H
、それはきれいだと思いますが、下記のように、あなたのバージョンのではサポートされていないかもしれませんgrep
。
オプションが-H
あり、-n
利用可能な場合(man grep
あなたの友達です):
$ cat file
foo
bar
foobar
$ grep -H foo file
file:foo
file:foobar
$ grep -Hn foo file
file:1:foo
file:3:foobar
オプション:
-H、-with-filename
一致ごとにファイル名を出力します。これは、検索するファイルが複数ある場合のデフォルトです。
-n、-line-number
入力ファイル内の出力の各行の先頭に1から始まる行番号を付けます。(-nはPOSIXで指定されています。)
-H
ここではサポートされていません。
トリックは必要ありません。
grep --with-filename 'pattern' file
行番号付き:
grep -n --with-filename 'pattern' file
grep
のは知らないので、わかりません。
brew install grep
ますggrep
。PATHを変更する必要はありません。
これについては、この投稿のおかげで、なんとか実現できました。
複数のファイルを検索したい場合は、パターン(例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 で私に役立ちました。
find ./path_pattern/to_files -type f -name "files*.log" -exec grep -Hn pattern {} \;
これは、以前のソリューションからのわずかな変更です。私の例では、bashスクリプトでstderrリダイレクトを探します。
grep '2>' $(find . -name "*.bash")
grep --version