为什么 sed 的N
命令不读取单行?
# single line without \n
$ echo -en 'abc' | sed -n 'N;p'
$
# I expected 'abc'
# single line with \n
$ echo -en 'abc\n' | sed -n 'N;p'
$
# I expected 'abc'
# two lines
$ echo -en 'abc\n_' | sed -n 'N;p'
abc
_$
# works as expected
答案1
没有尾随换行符的行不是一行。一些sed
实现会丢弃它,一些实现会接受它,其中一些可能会添加丢失的换行符。
在:
echo -en 'abc\n' | sed -n 'N;p'
abc
sed从其模式空间开始。然后继续运行指定的命令。第一个N
是将下一行追加到模式空间。没有下一行,因此会导致sed
退出由 POSIX 指定并如记录的那样。