grep Top n跨文件匹配

grep Top n跨文件匹配,grep,Grep,我正在使用grep跨一组文件提取行: grep somestring *.log 是否可以限制每个文件的最大匹配数?理想情况下,我只需从每个*.log文件中打印出n行。将每个文件限制为11行: grep -m11 somestring *.log 下面是使用awk模拟它的另一种方法: awk 'f==10{f=0; nextfile; exit} /regex/{++f; print FILENAME":"$0}' *.log 说明: f==10:f是我们设置的标志,并检查其值是否等于1

我正在使用grep跨一组文件提取行:

grep somestring *.log

是否可以限制每个文件的最大匹配数?理想情况下,我只需从每个*.log文件中打印出n行。

将每个文件限制为11行:

grep -m11 somestring *.log

下面是使用
awk
模拟它的另一种方法:

awk 'f==10{f=0; nextfile; exit} /regex/{++f; print FILENAME":"$0}' *.log
说明:
  • f==10:
    f
    是我们设置的标志,并检查其值是否等于10。您可以根据行数对其进行配置 你希望比赛

  • nextfile:
    将处理移动到下一个文件

  • 退出:
    脱离
    awk

  • /regex/:
    您正在搜索
    regex
    模式

  • {++f;打印文件名“$0}:
    我们增加标志并打印文件名和行


+1不错。我以为我知道grep,但我想我只是不知道那些遗留的(Sun-OS4、SGI-Irix、HPUX 10.20等)在哪个版本中出现了
-m
?@JosephQuinsey我使用
-m
选项
GNU-grep
有一段时间了(红帽4已经有了)。请注意,即使不是所有11行都匹配,grep也将返回0。如果您在测试中使用,请考虑:
[[$(grep-m11 somestring*.log | wc-l)-eq 11]
谢谢,是否可以修改此选项以打印出最后n个匹配项?@PaulDixon您的意思是为每个文件打印最后10个匹配项?是的,也许我应该作为不同的问题来问这个问题,谢谢@PaulDixon。。抱歉,我正忙于工作,所以无法尽快回复。我已经发布了答案,但看起来您已经找到了答案。:)