これは私が入力したものであり、""
のユーザーのログのみを取得することが期待されていました 。しかし、私はサーバーにログ全体を持っています:
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
このキーワードのログのみを検索するには、このループで何を変更する必要がありますか?
ありがとうございます。
承認された回答:
zgrep
コマンドは、圧縮ファイルのgrepingに非常に役立ち、zcat
をパイプする必要がなくなります。 grep
へ 。また、グロビング(シェルパターンマッチング)によってファイルのリストを作成するためにforループを使用する必要はありません。
zgrep U2779897722719715411 *.log.gz >> sara.log
このコマンドは、ファイル名とU2779897722719715411を含む行を:
で区切って出力します。 キャラクター。
ファイル名のプレフィックスが不要な場合は、-h
を使用できます zgrep
のオプション :
zgrep -h U2779897722719715411 *.log.gz >> sara.log
これはループでも実現できますが、ls
の使用は避けてください。 、ループの完了後にファイルへのリダイレクトを実行します:
for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
または、そのユーザー文字列U2779897722719715411を含むファイルのファイル名のみが必要な場合は、-l
を使用できます。 zgrep
のオプション 上記のコマンドのいずれかで:
zgrep -l U2779897722719715411 *.log.gz >> sara.log
または
for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log