![使用grep命令读取文件从特定行号到文件末尾](https://linux22.com/image/153014/%E4%BD%BF%E7%94%A8grep%E5%91%BD%E4%BB%A4%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6%E4%BB%8E%E7%89%B9%E5%AE%9A%E8%A1%8C%E5%8F%B7%E5%88%B0%E6%96%87%E4%BB%B6%E6%9C%AB%E5%B0%BE.png)
假设我有一个每隔几秒/分钟就会被附加的文件。第一次我读取了整个文件并存储了最后一个行号(例如:last_line_numer 是:2000),后来我想使用“grep”命令读取文件以查找从行号 2001 到文件末尾的模式。我们如何才能实现这一目标?
我第一次运行以下命令:
grep 'tracker.php' apache.log | cut -d' ' -f1-8
现在我想在 grep 参数中使用特定行号运行上面的命令。
答案1
您可以使用 tail 从第 2001 行输出文件,并将结果通过管道传输到您的命令:
<apache.log tail +2001 | grep 'tracker.php' | cut -d' ' -f1-8
答案2
您可以使用
awk 'NR<2001 {next} /tracker.php/ {print NR, $1,$2,$3,$4,$5,$6,$7,$8}' apache.log
或者
awk 'NR<2001 {next} /tracker.php/ {print NR, $0}' apache.log | cut -d' ' -f1-9
它还将显示文件中匹配行的原始行号。
答案3
使用sed
:
sed '1,2000d; /tracker\.php/!d' | cut -d ' ' -f-8
也就是说,丢弃第 1 行到 2000 行(含),然后也丢弃任何不包含字符串 的行tracker.php
。通过 发送其余行cut
。