【发布时间】:2012-10-18 01:21:06
【问题描述】:
我有一个大文本文件,我想在这个文本文件中查看包含"time spent" 的行,我使用:
grep -in "time spent" myfile.txt
但我只对 50000 之后的行感兴趣。在输出中,我想查看 50000 之后的行并且包含“花费的时间”。有没有办法做到这一点?
【问题讨论】:
我有一个大文本文件,我想在这个文本文件中查看包含"time spent" 的行,我使用:
grep -in "time spent" myfile.txt
但我只对 50000 之后的行感兴趣。在输出中,我想查看 50000 之后的行并且包含“花费的时间”。有没有办法做到这一点?
【问题讨论】:
你可以tail它,然后grep:
tail -n +50000 myfile.txt | grep -in "time spent"
【讨论】:
任意 2 个行号之间的 grepping 答案:
Using sed and grep:
sed -n '1,50000p' someFile | grep < your_string >
【讨论】:
您也可以使用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 行工作到 $,这意味着最后一行。
【讨论】:
tail -n +2(从第 2 行开始的所有行)与 tail -n 2(仅最后 2 行)非常不同。
您可以使用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
【讨论】: