如何在 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
删除边界线,因为 //
在该点匹配第一行和最后一行范围。
<<"
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
删除边界线,因为 //
在该点匹配第一行和最后一行范围。