Shell脚本中如何提取字符串首个数字出现前的所有字符
Shell脚本提取字符串首个数字前所有字符的实现方案
针对Shell脚本场景下的两种字符串示例:a="aaa-bbbb-19.81"、a="aaa-19.81",提取首个数字出现位置之前的所有字符,可参考以下几种实现方式:
Bash内置正则匹配(无外部依赖,执行效率最高)
直接用Bash自带的正则匹配能力,无需调用外部工具:# 示例字符串 a="aaa-bbbb-19.81" # 匹配开头所有非数字字符,匹配结果存入BASH_REMATCH数组 [[ $a =~ ^[^0-9]+ ]] && result="${BASH_REMATCH[0]}" # 输出结果:aaa-bbbb- echo "$result"正则
^[^0-9]+的逻辑是从字符串开头匹配连续的非数字字符,直到第一个数字出现时停止,完全符合需求。如果需要去掉结果末尾的短横线等分隔符,可将正则调整为^(.*[^0-9])-?[0-9],取${BASH_REMATCH[1]}即可得到无尾部分隔符的结果。
如果输入字符串以数字开头,返回结果为空,符合「首个数字前无字符」的逻辑。sed命令实现(兼容所有POSIX Shell,通用性强)
用sed的替换逻辑直接删除首个数字及之后的所有内容:a="aaa-19.81" result=$(echo "$a" | sed 's/[0-9].*//') # 输出结果:aaa- echo "$result"awk命令实现
利用awk的match函数定位匹配范围后截取内容:a="aaa-bbbb-19.81" result=$(echo "$a" | awk '{match($0, /^[^0-9]+/); print substr($0, RSTART, RLENGTH)}') # 输出结果:aaa-bbbb- echo "$result"
内容的提问来源于stack exchange,提问作者Ajay Kumar
相关产品推荐
相关产品推荐

