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

如何用Unix命令或bash脚本实现配置文件内文件名带版本号的格式转换?

解决方案

sed 实现命令

直接输出结果(不修改原文件)

sed -E '/^name:/{N;s/name: ([^\.]+)\.([^\n]+)\nversion: ([0-9.]+)/name: \1-\2-\3.tar.gz\nversion: \3/}' 你的配置文件路径

直接修改原文件

  • Linux 平台执行:
sed -i -E '/^name:/{N;s/name: ([^\.]+)\.([^\n]+)\nversion: ([0-9.]+)/name: \1-\2-\3.tar.gz\nversion: \3/}' 你的配置文件路径
  • MacOS 平台执行:
sed -i '' -E '/^name:/{N;s/name: ([^\.]+)\.([^\n]+)\nversion: ([0-9.]+)/name: \1-\2-\3.tar.gz\nversion: \3/}' 你的配置文件路径

命令逻辑说明

  • 首先匹配所有以name:开头的行
  • 执行N命令将下一行(即version字段行)读入当前模式空间,合并两行内容做后续处理
  • 正则分组捕获三个核心内容:name字段中.前面的字符串、.后面的字符串、version字段的版本号
  • 替换时将name字段的.替换为-,拼接版本号和后缀.tar.gz,同时完整保留原version行的内容

如果你的name字段值存在多个.的情况,可以使用通用版本命令,自动替换所有.为-:

sed -E '/^name:/{h;s/name: //;s/\./-/g;x;N;s/(.*\nversion: )([0-9.]+)/\2/;G;s/([^\n]+)\n([^\n]+)/name: \2-\1.tar.gz\nversion: \1/}' 你的配置文件路径

效果验证

针对输入示例内容:

name: abc.def
version: 1.0.0

执行上述命令后输出结果完全符合预期:

name: abc-def-1.0.0.tar.gz
version: 1.0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:30:05