shell 使用sed显示两行中的一行

tjjdgumg  于 2023-02-09  发布在  Shell
关注(0)|答案(2)|浏览(214)

我正在尝试理解一个shell命令:sed -n 'p;n'
有了这个,你就可以打印两行了,我试着理解它命令是如何工作的(n;p),为什么它会有这个行为。
例如,如果我正在执行p;n;n,它将选择三行中的一行,但p;p;n它将打印两次第一行,隐藏第二行,打印两次第三行等,为什么它不打印第一行和第二行,并隐藏第三行?
我希望我说得清楚一点,我的问题很难解释,如果有人能帮助我。

vfh0ocws

vfh0ocws1#

    • 一月一日**

-n禁止所有未显式打印的输出。
'p;n'是要在每个输入行上运行的sed脚本。分号是pn这两个命令之间的分隔符。
p打印当前行,而不移动到下一行。
n移动到下一行,不打印任何内容。
在当前行上运行完这两个命令后,sed将移到下一行,然后在新行上再次运行脚本。此脚本将一直运行,直到没有更多的输入行为止。脚本的效果是继续打印,然后跳过行。

    • 一米七三**

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

    • 一米八米一x**

这基本上是相同的脚本,但在跳过该行之前,它将该行打印两次。
为什么不打印第一行和第二行,而隐藏第三行?
因为p不会将sed向前推进一行,所以只有n(或到达脚本末尾)会这样做。
(It注意sed -n 'p'打印每一行而不跳过任何一行,sed -n 'p;p;p'打印每一行三次,sed -n 'p;n;p'等效于sed -n 'p',这可能会有所帮助。)

jaxagkaj

jaxagkaj2#

奥林的回答已经足够解释了。我只想补充一下如何隐藏第三行。
要跳过每三行:

sed -n 'p;n;p;n'

相关问题