我正在尝试创建一个用于grepping / var / log /中的日志文件的脚本。我能够grep未压缩的日志或压缩的日志(作为日志轮换的结果)但是无法在一个命令中执行这两个操作(当我尝试这样做时,我得到“二进制文件(标准输入)匹配”),甚至可以做这样的事情吗?谢谢!
答案 0 :(得分:8)
zgrep
可以为您完成,它可以处理压缩文件和未压缩文件。一个缺点是它不能递归地处理目录。但对于您的实例,它已足够,您可以过滤,例如syslog如下:
$ zgrep PATTERN /var/log/syslog*
答案 1 :(得分:6)
尝试使用shell函数执行此操作:
greplog () {
cd /var/log
{
cat $1 $1.*[0-9]
zcat $1.*.gz
} | grep "$2"
}
用法:
$ greplog syslog pattern
答案 2 :(得分:1)
xzgrep
是常用压缩文件的一站式商店,至少在Ubuntu 16和macOS 10.12上安装(从 MacPorts 安装xz)。从man页面:
xzgrep invokes grep(1) on files which may be either uncompressed or compressed with xz(1), lzma(1), gzip(1), or bzip2(1)
。
用法(注意不支持-r):
$ find . -type f | parallel -j4 'xzgrep -Hn "PATTERN" {}'