我正在尝试理解一个shell命令:sed -n 'p;n'有了这个,你就可以打印两行了,我试着理解它命令是如何工作的(n;p),为什么它会有这个行为。例如,如果我正在执行p;n;n,它将选择三行中的一行,但p;p;n它将打印两次第一行,隐藏第二行,打印两次第三行等,为什么它不打印第一行和第二行,并隐藏第三行?我希望我说得清楚一点,我的问题很难解释,如果有人能帮助我。
sed -n 'p;n'
n;p
p;n;n
p;p;n
vfh0ocws1#
-n禁止所有未显式打印的输出。'p;n'是要在每个输入行上运行的sed脚本。分号是p和n这两个命令之间的分隔符。p打印当前行,而不移动到下一行。n移动到下一行,不打印任何内容。在当前行上运行完这两个命令后,sed将移到下一行,然后在新行上再次运行脚本。此脚本将一直运行,直到没有更多的输入行为止。脚本的效果是继续打印,然后跳过行。
-n
'p;n'
p
n
这基本上是相同的脚本,但它跳过了两行而不是一行。
这基本上是相同的脚本,但在跳过该行之前,它将该行打印两次。为什么不打印第一行和第二行,而隐藏第三行?因为p不会将sed向前推进一行,所以只有n(或到达脚本末尾)会这样做。(It注意sed -n 'p'打印每一行而不跳过任何一行,sed -n 'p;p;p'打印每一行三次,sed -n 'p;n;p'等效于sed -n 'p',这可能会有所帮助。)
sed -n 'p'
sed -n 'p;p;p'
sed -n 'p;n;p'
jaxagkaj2#
奥林的回答已经足够解释了。我只想补充一下如何隐藏第三行。要跳过每三行:
sed -n 'p;n;p;n'
2条答案
按热度按时间vfh0ocws1#
-n
禁止所有未显式打印的输出。'p;n'
是要在每个输入行上运行的sed脚本。分号是p
和n
这两个命令之间的分隔符。p
打印当前行,而不移动到下一行。n
移动到下一行,不打印任何内容。在当前行上运行完这两个命令后,sed将移到下一行,然后在新行上再次运行脚本。此脚本将一直运行,直到没有更多的输入行为止。脚本的效果是继续打印,然后跳过行。
这基本上是相同的脚本,但它跳过了两行而不是一行。
这基本上是相同的脚本,但在跳过该行之前,它将该行打印两次。
为什么不打印第一行和第二行,而隐藏第三行?
因为
p
不会将sed向前推进一行,所以只有n
(或到达脚本末尾)会这样做。(It注意
sed -n 'p'
打印每一行而不跳过任何一行,sed -n 'p;p;p'
打印每一行三次,sed -n 'p;n;p'
等效于sed -n 'p'
,这可能会有所帮助。)jaxagkaj2#
奥林的回答已经足够解释了。我只想补充一下如何隐藏第三行。
要跳过每三行: