2012-02-29 44 views
0

这里是我的一行:操纵SED方面

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

和查询:

 
trash 

BEGIN first 
labas 
END 

nieko nėra 

BEGIN second 
iki 
END 
nesimato 

我期待这样的结果:

 
labas 
iki 

不过,我得到这个:

BEGIN first 
labas 
END 
BEGIN second 
iki 
END 

我对sed上下文有什么误解?不应该{$d,1d;p}删除匹配输入的第一行和最后一行?

回答

1

不,它会删除作为文件第一行或最后一行的匹配输入的任何行。如果您删除query的前两行(因此第一行是“BEGIN”),您可以看到效果。

1

这可能会为你工作:

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

的确是它的工作原理,但并不有助于解释为什么我的版本不..谢谢。你能给我一个指针吗?这两个斜线对于大括号中的上下文究竟做了什么? – 2012-03-01 00:52:51

+1

只有当文件的第一行和最后一行之间有'/ BEGIN /,/ END /'范围时,您的版本才能正常工作。 '//'是最后一个匹配正则表达式的缩写,在本例中是'/ BEGIN /',后面是'/ END /'。在这些条件下,它不会打印出来,但会在它们之间的线上。 – potong 2012-03-01 01:09:08