grep Top n跨文件匹配
我正在使用grep跨一组文件提取行: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 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:
是我们设置的标志,并检查其值是否等于10。您可以根据行数对其进行配置 你希望比赛f
将处理移动到下一个文件nextfile:
脱离退出:
awk
您正在搜索/regex/:
或regex
模式
我们增加标志并打印文件名和行{++f;打印文件名“$0}:
-m
?@JosephQuinsey我使用-m
选项GNU-grep
有一段时间了(红帽4已经有了)。请注意,即使不是所有11行都匹配,grep也将返回0。如果您在测试中使用,请考虑:[[$(grep-m11 somestring*.log | wc-l)-eq 11]
谢谢,是否可以修改此选项以打印出最后n个匹配项?@PaulDixon您的意思是为每个文件打印最后10个匹配项?是的,也许我应该作为不同的问题来问这个问题,谢谢@PaulDixon。。抱歉,我正忙于工作,所以无法尽快回复。我已经发布了答案,但看起来您已经找到了答案。:)