我有一个很大的文本文件,我想在这个文本文件中看到包含"time spent"
的行,我使用:
grep -in "time spent" myfile.txt
但是我只对50000之后的行感兴趣。在输出中我想看到50000之后的行,并且包含“花费的时间”。 有没有办法做到这一点?
你可以尾巴,然后grep:
tail -n +50000 myfile.txt | grep -in "time spent"
或者,您可以使用sed
。 sed
可以用来模仿这样的grep
:
sed -n 's/pattern/&/p'
默认情况下,即使没有替换发生, sed
也会打印每一行。 -n
和/p
的组合使sed
仅打印出发生替换的行。 最后,我们用&
替换pattern
,这意味着自己替换pattern
。 结果:我们只是模仿grep
。
现在sed
可以采取一系列行动。 在你的情况下:
sed -n '50000,$s/time spent/&/p' myfile.txt
指定范围的格式如下: start,end
我们只是指示sed从50000行到$
这意味着最后一行。
你可以用{...}
来使用head
+ grep
和group命令,以便它们共享相同的输入:
{ head -n 50000 >/dev/null; grep -i PATTERN; } < infile
head
不消耗整个输入,它只得到第一个50000行,并将其转储到/dev/null
; 其余的行由grep
处理。
如果你需要预置的行号(如grep -in
),你可以使用awk
:
awk 'NR>50000 && tolower($0)~/PATTERN/{print NR ": " $0}' infile
回答任何2行号码之间的问题:
Using sed and grep: sed -n '1,50000p' someFile | grep < your_string >