从多个文件中获取grep并获取每个输出的前n行

时间:2015-10-08 19:28:47

标签: unix grep

我们说我有f个文件。

从每个文件我想grep一个模式。

我只想要来自每个文件的n模式匹配。

我有什么:

strings <files_*> | grep <pattern> | head -<n>

我确实需要使用strings,因为我正在处理二进制文件,而且从这个命令中我只得到总共n行。

2 个答案:

答案 0 :(得分:1)

grep有一个-mX选项,允许您指定匹配的数量。但是,将此添加到您的管道命令行,将在第一个X匹配总计停止...不是每个文件。

为了获得每个文件的数量,我想出了这个:

for FILE in `ls -f <files_*>` ; do strings "$FILE" | grep -m<X> <pattern> ; done

示例(搜索&#34; aa&#34;与x *匹配并从每个文件返回最多3行的文件将是:

for FILE in `ls -f x*` ; do strings "$FILE" | grep -m3 aa ; done

答案 1 :(得分:1)

对于我来说,我有一个日志目录,它有多个日志文件,名为info.log~info.log.3。我想grey每个文件的关键字&#39; current&#39;,并打印每个文件中的最后一行。

见下面的例子:

for file in info.log*;do echo $file ; grep 'current' $file |tail -n 1 ;done

输出如下

info.log

2017-10-15 18:03:30 - loggers - INFO - send_worker_heart_beat current listen len 33

info.log.1

2017-10-15 18:03:29 - loggers - INFO - send_worker_heart_beat current listen len 33

info.log.2

2017-10-15 18:03:11 - loggers - INFO - send_worker_heart_beat current listen len 34

info.log.3