如何在指定的行号之后grep一个string?

我有一个很大的文本文件,我想在这个文本文件中看到包含"time spent"的行,我使用:

 grep -in "time spent" myfile.txt 

但是我只对50000之后的行感兴趣。在输出中我想看到50000之后的行,并且包含“花费的时间”。 有没有办法做到这一点?

你可以尾巴,然后grep:

 tail -n +50000 myfile.txt | grep -in "time spent" 

或者,您可以使用sedsed可以用来模仿这样的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 >