/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 shell işlevini kullanarak bunuSıkıştırılmış dosyaları ve sıkıştırılmamış dosyaları aynı komutla greplayabilirim
cevap
Dene:
greplog() {
cd /var/log
{
cat $1 $1.*[0-9]
zcat $1.*.gz
} | grep "$2"
}
Kullanımı:
$ greplog syslog pattern
mükemmel çalıştı, teşekkürler! – lacrosse1991
grep ve arkadaşları ile tutarlı olmak için, greplog pattern syslog'una sahip olmak daha iyi olmaz mıydı? – hbogert
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*
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" {}'
@StevenPenny gz, böylece, örneğin syslog, syslog.1, syslog.2.gz, syslog.3.gz ve bu kadar – lacrosse1991