我只能抓取文件的前 n 行吗?

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

226185 次浏览

你可以选择使用程序和 grep一起使用。我认为最简单的方法是使用 head:

head -n10 filename | grep ...

head将输出前10行(使用 -n选项) ,然后您可以将输出通过管道传送到 grep

管道的魔力;

head -10 log.txt | grep <whatever>

head -10 file的输出可以通过管道连接到 grep,以完成以下工作:

head -10 file | grep …

使用 Perl:

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

你可以使用以下方法:

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

或者对于没有 |的单个进程使用 awk:

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

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

或使用 sed:

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

检查 regexp 并打印该行(-n表示不打印输入,这是默认值) ,然后在第10行之后退出。

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

对于那些在 Google 上找到它的人,我需要搜索多个文件的第一个 n行,但只打印匹配的文件名。我用过

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

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

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

Grep-A10 < 模式 >

这是为了抓取图案和图案后面的10行。这只对已知模式有效,如果您没有已知模式,请使用“ head”建议。

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

在图案之前打印两行。

在图案后面打印两行。

head -10 log.txt # read the first 10 lines of the file.

Joachim Isaksson 答案的一个扩展: 我经常需要一个长文件的中间部分,例如第5001行到5020行,在这种情况下,你可以将 headtail结合起来:

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

它获取前5020行,然后只显示其中的最后20行,然后将所有内容通过管道传递给 grep。

(编辑: 我的示例数字中的 fencepost 错误,向 grep 添加了管道)

grep -m6 "string" cov.txt

这只搜索 string的前6行