我的日志文件很长,是否可以让 grep 只搜索前 10 行?
管道的魔力;
head -10 log.txt | grep <whatever>
对于在 Google 上找到此内容的人,我需要搜索多个文件的前
n
行,但只打印匹配的文件名。我用过
gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames
一旦看到 10 行,
FNR..nextfile
就会停止处理文件。 //..{}
会打印文件名,并在给定文件中出现第一个匹配项时继续前进。要引用文件名以方便其他程序,请使用
gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames
或者使用
awk
进行单个进程而不使用 |
:
awk '/your_regexp/ && NR < 11' INPUTFILE
在每一行上,如果
your_regexp
匹配,并且记录数(行)小于 11,则执行默认操作(即打印输入行)。
或使用
sed
:
sed -n '/your_regexp/p;10q' INPUTFILE
检查您的正则表达式并打印该行(
-n
表示不打印输入,否则是默认值),并在第 10 行之后退出。
您有一些使用程序和
grep
的选项。我认为最简单的是使用 head
:
head -n10 filename | grep ...
head
将输出前 10 行(使用 -n
选项),然后您可以将该输出通过管道传输到 grep
。
grep "pattern" <(head -n 10 filename)
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.
您可以使用以下行:
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)
grep -A 10
这是抓取该模式以及该模式之后接下来的 10 行。这仅适用于已知模式,如果您没有已知模式,请使用“head”建议。
grep -m6 "string" cov.txt
仅搜索前 6 行
string