我可以只grep文件的前n行吗?

Dav*_*uer 113 bash search grep

我有很长的日志文件,是否可以要求grep只搜索前10行?

Joa*_*son 157

管道的神奇之处;

head -10 log.txt | grep <whatever>
Run Code Online (Sandbox Code Playgroud)

  • 你也可以将一个任意流传递给`head`:`someCmd | 头-10` (10认同)
  • 使用grep的-l选项时,有没有办法做到这一点?我想列出所有前5个字符为“ RIFFD”的文件。 (3认同)

cxw*_*cxw 45

对于在Google上找到此内容的人,我需要搜索n多个文件的第一行,但只打印匹配的文件名.我用了

 gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames
Run Code Online (Sandbox Code Playgroud)

FNR..nextfile停止处理文件,一旦10日线被看见.在//..{}打印上,每当在一个给定的文件中的第一场比赛显示了文件名和移动.要引用文件名以获得其他程序的好处,请使用

 gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames
Run Code Online (Sandbox Code Playgroud)

  • 我是那些在Google上发现这一点的人之一.谢谢! (8认同)
  • 要在目录上递归执行此操作:`find ./path -type -f -exec awk'FNR&gt; 10 {nextfile} / pattern / {print FILENAME; nextfile}''{}'+` (2认同)
  • 谢谢@OrangeDog。稍作修正:应该是“-type f” (2认同)

Zso*_*kai 24

或者awk用于单个过程而不|:

awk '/your_regexp/ && NR < 11' INPUTFILE
Run Code Online (Sandbox Code Playgroud)

在每一行上,如果your_regexp匹配,并且记录(行)数小于11,则执行默认操作(打印输入行).

或使用sed:

sed -n '/your_regexp/p;10q' INPUTFILE 
Run Code Online (Sandbox Code Playgroud)

检查正则表达式并打印行(-n表示不打印输入,否则为默认值),然后在第10行之后退出.

  • 加上风格不是"笨拙".在一个不需要动作声明的命令中,`2xifs`和`1xelse`将会成为aho.温伯格和克尔尼根哭了...... (3认同)

Dan*_*ego 8

你有几个选项使用程序grep.我认为最简单的方法是使用head:

head -n10 filename | grep ...
Run Code Online (Sandbox Code Playgroud)

head将输出前10行(使用-n选项),然后您可以输出到该输出grep.

  • 我甚至没有意识到,这里使用`head`的所有解决方案都使用了`-n 10`**(包括我)**没有意识到**默认**的头部显示***只有10行***.:) (6认同)