2013-02-18 6 views
7

/var/log /にあるログファイルをグレープするためのスクリプトを作成しようとしています。私はgrep(ログローテーションの結果として)圧縮されていないログや圧縮されたログのいずれかをgrepすることができますが、1つのコマンド(私はそうしようとすると "バイナリファイル(標準入力)そんなことをすることさえできますか?ありがとう!同じコマンドを使用して、圧縮ファイルと非圧縮ファイルの両方をgrepすることができます

+0

@StevenPenny .gzを、:

使い方(ノート-rがサポートされていません) – lacrosse1991

答えて

6

機能を使用してこれをやってみてください。

greplog() { 
    cd /var/log 
    { 
     cat $1 $1.*[0-9] 
     zcat $1.*.gz 
    } | grep "$2" 
} 

使用法:

$ greplog syslog pattern 
+1

完璧に働いて、ありがとう! – lacrosse1991

+0

grepその他との一貫性を保つために、 'grepogパターンsyslog'を持っている方が良いでしょうか? – hbogert

7

zgrepはあなたのためにそれを行うことができ、それは、圧縮と非圧縮の両方のファイルを処理します。 1つの欠点は、ディレクトリを再帰的に扱うことができないことです。しかし、あなたのインスタンスのためには、十分に十分です。次のようにsyslog:

$ zgrep PATTERN /var/log/syslog* 
1

xzgrepは、少なくともUbuntuの16と(MacPortsのからXZとともにインストールされる)MacOSの10.12で、一般的に圧縮されたファイルのためのワンストップショップです。 manページ: xzgrep invokes grep(1) on files which may be either uncompressed or compressed with xz(1), lzma(1), gzip(1), or bzip2(1)その上で、インスタンスのsyslog、syslog.1、syslog.2.gz、syslog.3.gzとのためにそう

$ find . -type f | parallel -j4 'xzgrep -Hn "PATTERN" {}'

関連する問題