操纵sed上下文

操纵sed上下文,sed,Sed,这是我的一句话: sed -n '/BEGIN/,/END/{$d;1d;p}' query 和查询: trash BEGIN first labas END nieko nėra BEGIN second iki END nesimato 垃圾 先开始 拉巴斯 结束 nieko nėra 第二个开始 iki 结束 内西马托 我期望这一结果: labas iki 拉巴斯 iki 然而,我明白了: BEGIN first labas END BEGIN second iki END 先开始

这是我的一句话:

sed -n '/BEGIN/,/END/{$d;1d;p}' query
和查询:

trash BEGIN first labas END nieko nėra BEGIN second iki END nesimato 垃圾 先开始 拉巴斯 结束 nieko nėra 第二个开始 iki 结束 内西马托 我期望这一结果:

labas iki 拉巴斯 iki 然而,我明白了:

BEGIN first labas END BEGIN second iki END 先开始 拉巴斯 结束 第二个开始 iki 结束
我对sed上下文有什么误解?
{$d,1d;p}
是否应该删除匹配输入的第一行和最后一行?

否,它删除匹配输入中作为文件第一行或最后一行的任何一行。如果删除
查询的前两行(因此第一行是“开始”),则可以看到效果。

这可能适用于您:

sed -n '/BEGIN/,/END/{//!p}' file
labas
iki

是的,它确实有效,但无助于解释为什么我的版本不起作用。。谢谢你能告诉我为什么吗?这两个斜杠对这些大括号中的上下文到底有什么作用?您的版本将工作,但仅当范围
/BEGIN/,/END/
在文件的第一行和最后一行之间时。
/
是最后一个匹配regexp的简写,在本例中是
/BEGIN/
,后面是
/END/
。在这些条件下,它不会打印出来,但在它之间的行上会打印出来。