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

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

pipe道的魔力;

head -10 log.txt | grep <whatever> 

对于在Google上find的人,我需要search多个文件的前n行,但只打印匹配的文件名。 我用了

  gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames 

FNR..nextfile一旦看到10行就停止处理文件。 //..{}打印文件名并在给定文件中的第一个匹配出现时继续。 要引用其他程序的文件名,请使用

  gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames 

或者在没有|情况下使用awk进行单个进程 :

 awk '/your_regexp/ && NR < 11' INPUTFILE 

在每一行上,如果your_regexp匹配,并且logging(行)数小于11,则执行缺省操作(即打印input行)。

或者使用sed

 sed -n '/your_regexp/p;10q' INPUTFILE 

检查您的正则expression式并打印行( -n表示不打印input,否则是默认值),并在第10行之后退出。

你有几个select使用程序与grep 。 我认为最简单的就是用head

 head -n10 filename | grep ... 

head将会输出前10行(使用-n选项),然后你可以把这个输出转到grep

 grep "pattern" <(head -n 10 filename) 

您可以使用以下行:

 head -n 10 /path/to/file | grep [...] 

head -10 file的输出可以通过pipe道传输到grep来实现:

 head -10 file | grep … 

使用Perl:

 perl -ne 'last if $. > 10; print if /pattern/' file 

grep -A 10 <模式>

这是为了抓住模式和模式之后的下10行。 这只适用于已知模式,如果你没有一个已知的模式使用“头”的build议。

对Joachim Isaksson的回答是一个扩展:通常我需要从一个长文件的中间,例如5001到5020行,在这种情况下,你可以结合headtail

 head -5020 file.txt | tail -20 | grep x 

这得到了第一个5020行,然后只显示了最后20个,然后pipe一切grep。

(编辑:在我的例子中fencepost错误,添加pipe道到grep)

头-10 log.txt | grep -A 2 -B 2 pattern_to_search

头-10 log.txt:读取文件的前10行。

-A 2:在图案之前打印两行。

-B 2:在图案后面打印两行。

我有一个类似的问题,所有上述问题都没有完全解决。 我也有兴趣获取包含匹配行的文件名。 我的解决scheme

 ls |parallel --gnu 'cat <(echo {}) <(head {})|grep -B1 -m1 -P "^>.*F3$"' 

注意:在我的情况模式总是匹配的第一行。