如何在<<">对之间提取内容在Unix中

时间:2015-04-03 11:29:24

标签: unix sed

<<"  
72306735   
">>  

<<"  
72306735 35623130 
30000000   
">>  

<<"  
select * from emp  
where id=1   
">>

预期产出:

72306735  
72306735 35623130   
30000000   
select * from emp    
where id=1   

我试着像sed一样:

sed -n '/<<"/,/">>/p' script.txt  

输出:

<<"  
72306735  
">>  
<<"  
72306735 35623130  
30000000  
">>  
<<"  
select * from emp  
where id=1  
">>  

请帮我解决这个问题

由于

1 个答案:

答案 0 :(得分:1)

你几乎拥有它。使用

sed -n '/<<"/,/">>/ { //! p; }' script.txt  

//再次尝试最近尝试的正则表达式。如图所示使用时,最近尝试的正则表达式是确定当前行是否是模式范围/<<"/,/">>/的一部分的正则表达式。在范围的第一行,即与第一行匹配的模式,从那时起,它就是与最后一行匹配的模式。

实际的结果是它匹配范围的起始行和终点行,因此//!p表示仅在当前行不是其中之一时才打印。

//的使用不仅限于{}块。你也可以写

sed '/<<"/,/">>/!d; //d' script.txt

其中/<<"/,/">>/!d删除不属于范围的所有行,//d删除边框线,因为此时//匹配范围的第一行和最后一行