我试图拉一个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 #################################