我们说我有f
个文件。
从每个文件我想grep
一个模式。
我只想要来自每个文件的n
模式匹配。
我有什么:
strings <files_*> | grep <pattern> | head -<n>
我确实需要使用strings
,因为我正在处理二进制文件,而且从这个命令中我只得到总共n
行。
答案 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