用 sed 显示一行两行

Display one line of two with sed

我正在尝试理解 shell 命令:sed -n 'p;n'

有了这个你就可以打印两行了,我想了解它的命令是如何工作的(n;p),为什么它有这种行为。

例如,如果我正在做 p;n;n,它会 select 三行,但是 p;p;n 它会打印两次第一行,隐藏第二行,打印第三行的两倍等等,为什么不打印第一行和第二行,而隐藏第三行?

我希望我说得清楚一点,很难解释我的问题,如果有人能帮助我的话。

sed -n 'p;n'

-n 抑制所有未显式打印的输出。

'p;n' 是每个输入行上 运行 的 sed 脚本。分号是两个命令之间的分隔符,pn.

p 打印当前行,而不移动到下一行。

n 移动到 下一个 行而不打印任何内容。

一旦这两个命令在当前行上 运行,sed 移动到下一行,然后在这一新行上再次 运行s 脚本。该脚本将保持 运行ning 直到没有更多的输入行。脚本的效果是一直打印,然后跳行。


p;n;n

这基本上是相同的脚本,但它跳过了两行而不是一行。


p;p;n

这基本上是同一个脚本,但它在跳过之前打印了两次该行。


why it isn't printing the first and second line, and hide the third one ?

因为 p 不会让 sed 前进一行,只有 n(或到达脚本末尾)才会这样做。

(注意 sed -n 'p' 打印每行而不跳过任何行,sed -n 'p;p;p' 打印每行三次,sed -n 'p;n;p' 等同于 sed -n 'p' 可能会有所帮助.)