如何在Bash中用单行或正则提取URL两连字符间的指定内容?
Bash单行/正则提取URL双连字符间的内容
需求:从URL http://abc-124-001.portal-ex.xyz-xyz.com:8091/ 中提取始终位于两个连字符之间的124,已有分步实现,以下是几种更简洁的单行或正则实现方式:
方法1:Bash参数扩展+cut单行实现
直接利用Bash的参数扩展截断前缀,再用cut分割取第一部分:
f=http://abc-124-001.portal-ex.xyz-xyz.com:8091/ && echo "${f#*-}" | cut -d'-' -f1
输出:124
方法2:Bash内置正则匹配(推荐,无需外部工具)
Bash 3.0及以上支持正则匹配,直接捕获目标内容:
f=http://abc-124-001.portal-ex.xyz-xyz.com:8091/ && [[ $f =~ -([0-9]+)- ]] && echo "${BASH_REMATCH[1]}"
如果目标内容不只是数字,可把[0-9]+改成[^-]+匹配任意非连字符内容:
f=http://abc-xxx-001.portal-ex.xyz-xyz.com:8091/ && [[ $f =~ -([^-]+)- ]] && echo "${BASH_REMATCH[1]}"
输出:xxx
方法3:sed正则替换
适合管道场景,跨shell兼容性好:
echo "http://abc-124-001.portal-ex.xyz-xyz.com:8091/" | sed -E 's/.*-([^-]+)-.*/\1/'
输出:124
内容的提问来源于stack exchange,提问作者deewreck
相关产品推荐
相关产品推荐

