27

我有一个大文本文件,我想查看"time spent"此文本文件中包含的行,我使用:

grep -in "time spent" myfile.txt

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

4

4 回答 4

48

你可以tail它,然后grep:

tail -n +50000 myfile.txt | grep -in "time spent"
于 2012-10-28T14:28:54.233 回答
7

回答任何 2 个行号之间的 grepping:

Using sed and grep:

sed -n '1,50000p' someFile | grep < your_string >
于 2016-07-26T22:56:30.307 回答
6

或者,您可以使用sed. sed可以用来模仿grep这样的:

sed -n 's/pattern/&/p'

sed即使没有发生替换,默认情况下也会打印每一行。-n/p的组合sed只打印发生替换的行。最后,我们replace patternby &which 表示pattern自行替换。结果:我们只是模仿了grep.

现在sed可以采取一系列行动。在你的情况下:

sed -n '50000,$s/time spent/&/p' myfile.txt

指定范围的格式如下:start,end 我们只是指示 sed 从第 50000 行开始工作,$这意味着最后一行。

于 2013-08-22T19:00:25.903 回答
1

您可以使用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
于 2015-03-17T16:43:23.437 回答