正则表达式 – 如何进行多线和非贪婪的模式范围匹配?
发布时间:2020-12-14 05:55:59 所属栏目:百科 来源:网络整理
导读:我试图拉一个bash one-liner用于在两个模式之间打印线条.不过,我需要它不贪婪.我有一个文件’test.txt’,其中包含以下内容: ############ Apple ############# 1# 2# 3# 4 ############################################# Orange ############# 1# 2# 3# 4#
我试图拉一个bash one-liner用于在两个模式之间打印线条.不过,我需要它不贪婪.我有一个文件’test.txt’,其中包含以下内容:
############ Apple ############ # 1 # 2 # 3 # 4 ################################# ############ Orange ############ # 1 # 2 # 3 # 4 ################################# ############ Grape ############ # 1 # 2 # 3 # 4 ################################# 我想要打印的是“橙色”部分.而且只有那一节.也就是说,我想要打印以下内容: ############ Orange ############ # 1 # 2 # 3 # 4 ################################# 我也不想匹配特定数量的行,因为行数会波动.我尝试了很多不同的东西.我试过sed,awk,grep(用-P和*.?regex).似乎没有什么比这更合适了. Sed和awk很贪心,所以我无法匹配该部分的结尾. Grep(据我所知)不支持多行范围匹配.使用内置插件是否有解决方案?我知道有pcregrep,但我宁愿使用内置插件或者用普通发行版“运送”的东西.我想要“开箱即用”而优雅.可能吗? 解决方法
使用
sed的地址范围:
sed -n '/^#+[ ]*Orange[ ]*#+/,/^#+$/ p' infile 它产生: ############ Orange ############ # 1 # 2 # 3 # 4 ################################# (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |