为什么我的 tail 命令 -n+NUM 不起作用?

Why does my tail command -n+NUM not work?

我想了解Linux中的以下命令:

# tail -n+454 /path/to/a/file | head -n 6

我希望 tail -n+454 /path/to/a/file 打印这些行,从第 454 行开始和接下来的 5 行。

| 将该输出作为输入发送到head。然后只取前10行。

最后,-n 6 定义只有前 6 行被打印到屏幕上。

我是否正确翻译了命令?

现在我遇到了以下问题:假设我有一个文件,其中包含以下行:

# Step #6: Configure output plugins

我想打印该行之前的 5 行(包括该行)。

首先我检查了我的问题行的行号:

nl /path/to/a/file | grep output

行号是459。

我想要第459行之前的5行以及第459行本身(即第454到459行)。

命令 tail -n+454 /path/to/a/file | head -n 6 给出以下输出:

...这是第 380 到 384 行:

我希望得到第 454 到 459 行。我有什么不明白的?我的命令不正确吗?

使用这个命令:

head -n $(grep -n "Step #6: Configure output plugins" /path/to/a/file | awk -F ':' '{print }') /path/to/a/file | tail -n 5 

注:
该命令有两部分

a) 找到行号:

grep -n "Step #6: Configure output plugins" /path/to/a/file | awk -F ':' '{print }'

b) 过滤你想要的行:

head -n [LINE NUMBER] /path/to/a/file | tail -n 5 

我的错误是我只显示了文件中的非空行,这是错误的。

最好用...

nl -ba [FILE]

为文件中的所有行编号。然后查找感兴趣的行并使用 head 和 tail 命令(带管道)获得最终结果。

示例:

tail -n +539 [FILE] | tail -n 6
tail -n +539 [FILE] | head -n -212
head -n 544 [FILE] | tail -n 6
head -n 544 [FILE] | tail -n +539

所有命令导致相同的结果。

我犯的另一个错误是语法。 -n 和 +NUM 之间应该有一个 space。

顺便说一句,我OP中的行号是错误的,因为我使用了错误的行号命令。我指的是 544 不是 459.