考虑这个输入文件。sed多行模式缓冲区刷新最后一行 - 正常行为?
# cat test.txt
some other stuff
some more other stuff
first line
second thingy
third whatsit
fourth oojiflop
fifth item
sixth widget
this is the
end of file
运行这一个内胆就像我想要的一样工作(在OSX上创建了多个sed命令)。它删除“第一行”和“第五项”之间的所有行,但仅限于出现“第五项”时。
sed -e '/^first line/{' -e ':no' -e '$!{N' -e '/fifth item$/ b y' -e 'b no' -e ':y' -e 'd;};}' test.txt
我担心的是,如果“第五项”模式不在行之后的“行头”被匹配,那么就不能打印到“第一线”之后的任何行。但它确实如此。它似乎在GNU风格以及BSD/OSX中起作用。
所以 - 如果用完
sed -e '/^first line/{' -e ':no' -e '$!{N' -e '/xxxxxxx$/ b y' -e 'b no' -e ':y' -e 'd;};}' test.txt
然后,当它到达^第一线将开始填满使用“N”命令模式缓冲区。它会继续,寻找xxxxxxx,直到它击中EOF,并且$!测试失败。此时,执行从外括号中返回,并且在终止之前,sed似乎将整个模式缓冲区转储为标准输出。
我不知道这种行为 - 我的问题是,这是否是正常的行为,它是记录(事实上,当$测试失败全模式缓冲区得到倾倒!)
您正在寻找的准确行为是什么? –
'sed'默认打印模式空间,除非您使用'-n'。 –
总会有一个点,在这'的sed -f script.sed'比上一行压扁一切成多个'-e'选择更明智。我认为你的脚本可能已经达到了这一点。 –