我有很长的日志文件,是否可以要求 grep 只搜索前10行?
你可以选择使用程序和 grep一起使用。我认为最简单的方法是使用 head:
grep
head
head -n10 filename | grep ...
head将输出前10行(使用 -n选项) ,然后您可以将输出通过管道传送到 grep。
-n
管道的魔力;
head -10 log.txt | grep <whatever>
head -10 file的输出可以通过管道连接到 grep,以完成以下工作:
head -10 file
head -10 file | grep …
使用 Perl:
perl -ne 'last if $. > 10; print if /pattern/' file
你可以使用以下方法:
head -n 10 /path/to/file | grep [...]
或者对于没有 |的单个进程使用 awk:
|
awk
awk '/your_regexp/ && NR < 11' INPUTFILE
在每一行上,如果 your_regexp匹配,且记录数(行数)小于11,则执行默认操作(即打印输入行)。
your_regexp
或使用 sed:
sed
sed -n '/your_regexp/p;10q' INPUTFILE
检查 regexp 并打印该行(-n表示不打印输入,这是默认值) ,然后在第10行之后退出。
grep "pattern" <(head -n 10 filename)
对于那些在 Google 上找到它的人,我需要搜索多个文件的第一个 n行,但只打印匹配的文件名。我用过
n
gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames
一旦看到10行,FNR..nextfile就停止处理文件。//..{}打印文件名,并在给定文件中出现第一个匹配项时继续执行。若要为其他程序引用文件名,请使用
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行,在这种情况下,你可以将 head和 tail结合起来:
tail
head -5020 file.txt | tail -20 | grep x
它获取前5020行,然后只显示其中的最后20行,然后将所有内容通过管道传递给 grep。
(编辑: 我的示例数字中的 fencepost 错误,向 grep 添加了管道)
grep -m6 "string" cov.txt
这只搜索 string的前6行
string