正则表达式 – 如何进行多线和非贪婪的模式范围匹配?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 如何进行多线和非贪婪的模式范围匹配?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图拉一个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
#################################

猜你在找的正则表达式相关文章