2013-02-18 15 views
7

/var/log/dosyasında bulunan günlük dosyalarının dağıtımı için bir komut dosyası oluşturmaya çalışıyorum. Sıkıştırılmamış günlükleri veya sıkıştırılmış günlükleri grep yapabildiğim (günlük döndürmenin bir sonucu olarak), ancak her ikisini de tek bir komutta yapamıyorum ("İkili dosya (standart giriş)" ile eşleşiyor " Böyle bir şey yapmak bile mümkün mü? Teşekkürler! Bir işlevini kullanarak bunuSıkıştırılmış dosyaları ve sıkıştırılmamış dosyaları aynı komutla greplayabilirim

+0

@StevenPenny gz, böylece, örneğin syslog, syslog.1, syslog.2.gz, syslog.3.gz ve bu kadar – lacrosse1991

cevap

6

Dene:

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

Kullanımı:

$ greplog syslog pattern 
+1

mükemmel çalıştı, teşekkürler! – lacrosse1991

+0

grep ve arkadaşları ile tutarlı olmak için, greplog pattern syslog'una sahip olmak daha iyi olmaz mıydı? – hbogert

7

zgrep o sıkıştırılmış ve sıkıştırılmamış dosya hem kolları, sizin için bunu yapabilir. Bir dezavantajı, dizinleri art arda tedavi edememesidir. Fakat örneğiniz için, bu tamamen yeterlidir ve ör. aşağıdaki gibi syslog:

$ zgrep PATTERN /var/log/syslog* 
1

xzgrep en az Ubuntu 16 ve (MacPorts gelen xz ile yüklenir) MacOS 10.12 tarihinde, yaygın sıkıştırılmış dosyalar için tek bir yerden. man sayfasından: xzgrep invokes grep(1) on files which may be either uncompressed or compressed with xz(1), lzma(1), gzip(1), or bzip2(1).

Kullanımı (not r desteklenmez):

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