测试人社区

怎么用正则提取一个字符串的中间部分呢?

需要提取的字符串如下,

<spring.boot.version>2.1.0.RELEASE</spring.boot.version>

想要的结果是提取出中间的数字 2.1.0
百度的结果是这样解决:

m=\<spring.boot.version\>2.1.0.RELEASE\</spring.boot.version\>

n=echo ${m#*<spring.boot.version>}

>>> 2.1.0.RELEASE</spring.boot.version>

echo ${n%.RELEASE</spring.boot.version>}

>>>2.1.0

但是感觉这样写很繁琐,请问有没有简单的方法去匹配想要的中间字符串呢?

\d\.\d\.\d
直接这样就能匹配了吧

了解下parse

这是输出结果,匹配到了,但是没办法单独输出

谢谢老师,这个我看了一下是python的,想了解一下在shell脚本里面有没有可行的方法呢?

grep添加 -o 参数就可以啦
image

-o 意为只显示被匹配到的字符

谢谢~还想请教一下,-P是什么意思呢?

grep后跟正则是需要加-E;加E是扩展的 不加E是原生的;如果正则表达式涵\d,则需要把-E改成-P,例如:grep -P “\d[1-3]\w*.” e.txt

但是为什么我用这个

grep  '\d\.\d\.\d'

或者

grep  -E '\d\.\d\.\d'

也筛选出来了呢。。我是Mac系统,有关系吗?

我我记得之前查过说macos grep默认在扩展模式运行