我有很长的日志文件,是否可以要求grep只搜索前10行?
答案 0 :(得分:145)
管道的魔力;
head -10 log.txt | grep <whatever>
答案 1 :(得分:42)
对于在Google上找到此内容的人,我需要搜索多个文件的第一行n
行,但只打印匹配的文件名。我用了
gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames
FNR..nextfile
一旦看到10行就停止处理文件。 //..{}
打印文件名,并在给定文件中的第一个匹配项出现时继续运行。要引用文件名以获得其他程序的好处,请使用
gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames
答案 2 :(得分:23)
或者使用awk
来处理没有|
的单个流程:
awk '/your_regexp/ && NR < 11' INPUTFILE
在每一行上,如果your_regexp
匹配,且记录数(行数)小于11,则执行默认操作(打印输入行)。
或使用sed
:
sed -n '/your_regexp/p;10q' INPUTFILE
检查正则表达式并打印行(-n
表示不打印输入,否则为默认值),并在第10行之后退出。
答案 3 :(得分:8)
您可以使用程序和grep
一些选项。我认为最简单的方法是使用head
:
head -n10 filename | grep ...
head
将输出前10行(使用-n
选项),然后您可以将该输出传递给grep
。
答案 4 :(得分:4)
grep "pattern" <(head -n 10 filename)
答案 5 :(得分:2)
head -10 file
的输出可以通过管道传输到grep
,以实现此目的:
head -10 file | grep …
使用Perl:
perl -ne 'last if $. > 10; print if /pattern/' file
答案 6 :(得分:2)
您可以使用以下行:
head -n 10 /path/to/file | grep [...]
答案 7 :(得分:2)
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.
答案 8 :(得分:2)
grep -m6 "string" cov.txt
这仅在前6行中搜索string
答案 9 :(得分:1)
Joachim Isaksson的答案的答案:我常常需要从长文件的中间找到一些东西,例如:第5001行到第5020行,在这种情况下,您可以将head
与tail
合并:
head -5020 file.txt | tail -20 | grep x
这会获得前5020行,然后只显示其中的最后20行,然后将所有内容输送到grep。
(编辑:我的示例数字中的fencepost错误,向grep添加了管道)
答案 10 :(得分:0)
我遇到了类似的问题,所有上述问题都没有完全解决。我也有兴趣获取包含匹配行的文件名。 我的解决方案:
ls |parallel --gnu 'cat <(echo {}) <(head {})|grep -B1 -m1 -P "^>.*F3$"'
N.B:我案例中的模式总是与第一行匹配。
答案 11 :(得分:-1)
grep -A 10&lt; Pattern&gt;
这是在模式之后抓取模式和接下来的10行。如果没有已知模式使用“头部”建议,这对于已知模式很有效。