sed 'N; D' testfile
testfile包含:
this is the first line this is the second line this is the third line this is the fourth line
我正在使用RHEL 6,输出结果如下:
this is the fourth line
根据我的理解, N
只是将下一行拉入模式空间, D
只删除模式空间的第一行。 所以输出应该是:
this is the second line this is the fourth line
有人能解释为什么输出如上所述吗?
根据文件 :
d
如果模式空间不包含换行符,就像d命令发出一样,开始一个正常的新周期。 否则,删除模式空间中的文本直到第一个换行符,然后重新启动循环,结果为模式空间 ,而不读取新的输入行。
(强调我的)
这听起来像这样会从头开始重新启动你的sed程序,读取和删除行,直到输入完成,此时只有最后一行留在缓冲区中。
如已经示出的那样,使用D
将移动到程序的开始。 但是,您可以使用以下内容来打印偶数行:
sed -n 'n;p'
并打印赔率:
sed 'n;d'
在GNU sed中,你也可以使用:
sed '0~2!d' # Odd sed '1~2!d' # Even
另一种可以是这样的:
N;s/^[^\n]*\n//
这将读取模式空间的下一行,然后替换第一个。
有人可能会问为什么这是行为。 其中一个原因就是使这样的事情成为可能,使用模式空间中的多行:
$!N;/\npattern$/d;P;D
以上将删除与之前的行匹配的行。