我可以只 grep 文件的前 n 行吗?

问题描述 投票:0回答:11

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

bash search grep
11个回答
218
投票

管道的魔力;

head -10 log.txt | grep <whatever>

63
投票

对于在 Google 上找到此内容的人,我需要搜索多个文件的前

n
行,但只打印匹配的文件名。我用过

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

一旦看到 10 行,

FNR..nextfile
就会停止处理文件。
//..{}
会打印文件名,并在给定文件中出现第一个匹配项时继续前进。要引用文件名以方便其他程序,请使用

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

28
投票

或者使用

awk
进行单个进程而不使用
|
:

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

在每一行上,如果

your_regexp
匹配,并且记录数(行)小于 11,则执行默认操作(即打印输入行)。

或使用

sed
:

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

检查您的正则表达式并打印该行(

-n
表示不打印输入,否则是默认值),并在第 10 行之后退出。


10
投票

您有一些使用程序和

grep
的选项。我认为最简单的是使用
head
:

head -n10 filename | grep ...

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


4
投票
grep "pattern" <(head -n 10 filename)

4
投票
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.

3
投票

您可以使用以下行:

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

3
投票

head -10 file
的输出可以通过管道传输到
grep
以完成此操作:

head -10 file | grep …

使用 Perl:

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

3
投票

Joachim Isaksson 答案的扩展:我经常需要长文件中间的一些内容,例如第 5001 行到 5020 行,在这种情况下,您可以将

head
tail
结合使用:

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

这将获取前 5020 行,然后仅显示其中的最后 20 行,然后将所有内容通过管道传输到 grep。

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


0
投票

grep -A 10

这是抓取该模式以及该模式之后接下来的 10 行。这仅适用于已知模式,如果您没有已知模式,请使用“head”建议。


-3
投票
grep -m6 "string" cov.txt

仅搜索前 6 行

string

© www.soinside.com 2019 - 2024. All rights reserved.