You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中通过正则分组匹配替换文件名指定内容为变量值

文件名替换解决方案

针对你需要将格式为_vvvv_id_vvvv.txt(v为可变部分)的文件名中,被下划线包裹的中间id替换为变量$myvar的需求,以下是两种可靠实现方式,可避免因可变部分包含id字符串导致的误替换:

方法一:使用 sed 实现

通过正则捕获整个文件名结构,精准定位中间需要替换的部分:

myvar='bar'
f='_12345_23_678.txt'
result=$(echo "$f" | sed -E "s/^(_.*)_([^_]+)_(.*\.txt)$/\1_${myvar}_\3/")
echo $result  # 输出 _12345_bar_678.txt

正则逻辑:

  • ^(_.*):捕获从开头下划线到倒数第二个下划线前的所有内容(保留可变前缀)
  • _([^_]+)_:匹配中间被下划线包裹的目标id片段(确保仅匹配单个下划线分隔的部分)
  • (.*\.txt)$:捕获最后一个下划线到.txt结尾的内容(保留可变后缀)
  • 替换时将中间的id片段替换为$myvar,前后捕获内容保持不变

方法二:使用 awk 实现

通过分割字符串定位中间字段,灵活完成替换:

myvar='bar'
f='_12345_23_678.txt'
result=$(echo "$f" | awk -v var="$myvar" -F '_' '{
    output = $1
    for(i=2; i<=NF-2; i++) {
        output = output "_" $i
    }
    output = output "_" var "_" $(NF)
    print output
}')
echo $result  # 输出 _12345_bar_678.txt

逻辑说明:

  • 用下划线_作为分隔符拆分文件名
  • 拼接前NF-2个字段(保留可变前缀部分)
  • 插入变量$myvar作为中间替换内容
  • 拼接最后一个字段(包含.txt后缀)

内容的提问来源于stack exchange,提问作者yhu420

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:43:13