12

我正在尝试制作一个脚本来 grepping 位于 /var/log/ 中的日志文件。我可以 grep 未压缩的日志或压缩的日志(由于日志轮换),但无法在一个命令中同时执行这两种操作(当我尝试这样做时,我得到“二进制文件(标准输入)匹配”),甚至有可能做这样的事情吗?谢谢!

4

3 回答 3

10

zgrep可以为你做,它处理压缩和未压缩的文件。一个缺点是它不能递归地处理目录。但是对于您的实例,它是完全足够的,您可以过滤例如系统日志,如下所示:

$ zgrep PATTERN /var/log/syslog*
于 2015-05-19T09:47:16.560 回答
6

尝试使用函数执行此操作:

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

用法 :

$ greplog syslog pattern
于 2013-02-18T18:17:38.070 回答
3

xzgrep是常用压缩文件的一站式商店,至少在 Ubuntu 16 和 macOS 10.12 上(使用MacPorts中的 xz 安装)。从手册页: 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" {}'

于 2017-02-13T21:02:10.617 回答