我可以只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行,在这种情况下,你可以结合head
和tail
:
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$"'
注意:在我的情况模式总是匹配的第一行。