如何使用Shell变量扩展提取指定格式字符串中的数字串123456
提取纯数字部分的实现方法
有两种常用的实现方案,都可以获取到目标数字:
方案1:纯Bash变量扩展(无外部命令,效率最高)
Bash参数扩展不支持直接嵌套,你可以分两步处理:
patchname="p123456_19100210720_linux-86-64" # 第一步:提取第一个下划线前的前缀 p123456 prefix=${patchname%%_*} # 第二步:删除前缀开头的非数字部分(如果固定是p开头,也可以简化写为${prefix#p}) patch_num=${prefix##*[!0-9]} echo $patch_num
运行后直接输出123456。
方案2:调用外部命令(写法更灵活)
如果允许使用sed/awk等外部工具,可以一步完成提取:
sed实现:
patch_num=$(echo "$patchname" | sed -E 's/^[^0-9]*([0-9]+)_.*/\1/')
awk实现:
patch_num=$(echo "$patchname" | awk -F '[_p]' '{print $2}')
内容的提问来源于stack exchange,提问作者Asdfg
相关产品推荐
相关产品推荐

