用 sed 显示一行两个

rSi*_*Sim 1 shell sed line display

我试图理解一个 shell 命令: sed -n 'p;n'

有了这个,您将能够在两行上打印,我试图了解它的命令是如何工作的(n;p),为什么它有这种行为。

例如,如果我在做p;n;n,它会选择一行三行,但p;p;n它会在第一行打印两次,隐藏第二行,在第三行打印两次等等,为什么它不打印第一行和第二行,并隐藏第三个?

我希望我有点清楚,如果有人可以帮助我,很难解释我的问题。

Oll*_*han 7

sed -n 'p;n'

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

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

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

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

一旦在当前行上运行了这两个命令,sed 就会移动到下一行,然后在这个新行上再次运行脚本。这个脚本会一直运行,直到没有更多的输入行。脚本的作用是继续打印,然后跳过行。


p;n;n

这大部分是相同的脚本,但它跳过了两行而不是一行。


p;p;n

这大部分是相同的脚本,但它在跳过它之前打印了两次该行。


为什么不打印第一行和第二行,并隐藏第三行?

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

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