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

How to extract content between pair of <<" ">> in Unix

<<"  
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  
">>  

请帮我解决这个问题

谢谢

你几乎成功了。使用

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

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

实际结果是它匹配范围的开始和结束行,所以//!p意味着仅当当前行不是其中之一时才打印。

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

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

其中 /<<"/,/">>/!d 删除所有不属于范围的行,而 //d 删除边界线,因为 // 在该点匹配第一行和最后一行范围。