【发布时间】:2012-02-04 10:40:05
【问题描述】:
我的日志文件很长,是否可以让 grep 只搜索前 10 行?
【问题讨论】:
我的日志文件很长,是否可以让 grep 只搜索前 10 行?
【问题讨论】:
管道的魔力;
head -10 log.txt | grep <whatever>
【讨论】:
head:someCmd | head -10
head log.txt | grep <whatever>
-l 选项时有没有办法做到这一点?我想列出前 5 个字符为 RIFFD 的所有文件。
对于在 Google 上找到此内容的人,我需要搜索多个文件的前 n 行,但只打印匹配的文件名。我用过
gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames
一旦看到 10 行,FNR..nextfile 就会停止处理文件。 //..{} 打印文件名并在给定文件中的第一个匹配项出现时继续前进。要引用文件名以方便其他程序,请使用
gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames
【讨论】:
FNR=1 也只会搜索第一行。谢谢!
find ./path -type -f -exec awk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' '{}' +
-type f
或者对没有|的单个进程使用awk:
awk '/your_regexp/ && NR < 11' INPUTFILE
在每一行上,如果your_regexp匹配,并且记录(行)数小于11,则执行默认操作(即打印输入行)。
或使用sed:
sed -n '/your_regexp/p;10q' INPUTFILE
检查您的正则表达式并打印该行(-n 表示不打印输入,否则为默认值),并在第 10 行之后立即退出。
【讨论】:
awk '{ if ( NR <= 10 ) { if(index($0,"ab") > 0) { print $0; } } else { exit; } }' textfile -- 更快。
awk '{ if ( NR <= 10 ) { if( $0 ~ "YOUR_REGEXP") { print } } else { exit; } }' textfile 会。
awkish。 2xifs 和 1xelse 在不需要任何操作语句的命令中会产生 aho。 weinberger 和 kernighan 哭了……
除了grep 之外,您还有一些使用程序的选项。我认为最简单的是使用head:
head -n10 filename | grep ...
head 将输出前 10 行(使用 -n 选项),然后您可以将该输出通过管道传输到 grep。
【讨论】:
head 的所有解决方案都使用了-n 10 (包括我) 没有意识到head 默认 显示仅 10 行。 :)
grep "pattern" <(head -n 10 filename)
【讨论】:
您可以使用以下行:
head -n 10 /path/to/file | grep [...]
【讨论】:
head -10 file 的输出可以通过管道传输到grep 以完成此操作:
head -10 file | grep …
使用 Perl:
perl -ne 'last if $. > 10; print if /pattern/' file
【讨论】:
对 Joachim Isaksson 的回答的扩展:我经常需要一个长文件中间的一些东西,例如第 5001 到 5020 行,在这种情况下,您可以将 head 与 tail 结合使用:
head -5020 file.txt | tail -20 | grep x
这会获取前 5020 行,然后只显示最后 20 行,然后将所有内容通过管道传输到 grep。
(已编辑:我的示例编号中的 fencepost 错误,将管道添加到 grep)
【讨论】:
head -10 log.txt | grep -A 2 -B 2 pattern_to_search
-A 2:在模式前打印两行。
-B 2:在模式后打印两行。
head -10 log.txt # read the first 10 lines of the file.
【讨论】:
-C 2 会和-A 2 -B 2 做同样的事情
grep -A 10
这是抓取模式和模式之后的下 10 行。这仅适用于已知模式,如果您没有已知模式,请使用“head”建议。
【讨论】:
grep -m6 "string" cov.txt
这只会在前 6 行搜索string
【讨论】: