如何使用Bash脚本从hostname中提取两段数字之间的字母存入变量
Bash 提取 hostname 两段数字间纯字母的解决方案
你用IFS没拿到预期结果是因为IFS只能按单个固定字符拆分字符串,你的分隔符是1~2位长度不定的数字,无法直接用IFS定位拆分位置,用正则匹配是最直接的实现方式,以下是两种可直接落地的方案:
方案1:Bash 内置正则匹配(无需依赖外部工具,性能最优)
Bash 3.0 及以上版本支持原生正则匹配操作符 =~,匹配到的捕获组会自动存入 BASH_REMATCH 数组,实现代码如下:
# 读取当前主机 hostname,也可手动赋值测试 hostname_val=$(hostname) # 正则逻辑:跳过开头非数字内容 + 1~2位数字,捕获中间纯字母,匹配结尾1~2位数字+任意后缀 if [[ $hostname_val =~ [^0-9]+[0-9]{1,2}([a-zA-Z]+)[0-9]{1,2} ]]; then target_str=${BASH_REMATCH[1]} # 此处可直接使用 $target_str 变量做后续逻辑 echo "提取结果:$target_str" fi
测试示例输入 abcd1efghij12kl 会直接输出 efghij,完全符合你的规则要求。
方案2:sed 命令实现(兼容性更强,适配低版本 Bash 环境)
如果运行环境 Bash 版本较低,可以用 sed 命令做正则替换直接拿到结果:
target_str=$(hostname | sed -E 's/^[^0-9]*[0-9]{1,2}([a-zA-Z]+)[0-9]{1,2}.*$/\1/')
参数说明:
-E启用扩展正则语法,减少转义字符的编写- 正则逻辑和方案1一致,将整行内容替换为第一个捕获组的内容,即你需要的中间纯字母段
内容的提问来源于stack exchange,提问作者Tom Donnly
相关产品推荐
相关产品推荐

