如何在指定的行号后grep一个字符串?

时间:2012-10-28 14:20:22

标签: linux string search grep

我有一个大文本文件,我希望在此文本文件中看到包含"time spent"的行,我使用:

grep -in "time spent" myfile.txt

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

4 个答案:

答案 0 :(得分:36)

你可以尾随它,然后grep:

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

答案 1 :(得分:4)

或者,您可以使用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行到$,这意味着最后一行。

答案 2 :(得分:2)

回答任意两个行号之间的问题:

Using sed and grep:

sed -n '1,50000p' someFile | grep < your_string >

答案 3 :(得分:1)

您可以使用head + grep并将命令与{...}分组,以便它们共享相同的输入:

{ 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