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

如何修改sed脚本排除指定依赖,保留其-SNAPSHOT后缀?

修改Sed脚本实现排除指定依赖保留-SNAPSHOT后缀

我来帮你调整这个sed脚本,实现你想要的需求——只移除不含指定关键词的依赖节点里version字段的-SNAPSHOT,而包含关键词的依赖则保留这个后缀。

原脚本的局限

你的原脚本会把<dependencies>块内所有-SNAPSHOT都移除,没办法区分特定依赖,我们需要给sed加一个"条件判断"逻辑,让它只处理符合要求的依赖节点。

调整后的脚本

GNU Sed(Linux环境)

find . -name pom.xml | xargs sed -i '
/<dependencies>/,/<\/dependencies>/{
  /<dependency>/{
    :process_dep
    /<\/dependency>/!{
      /scheduler/!{
        s/-SNAPSHOT//
      }
      n
      b process_dep
    }
  }
}'

BSD Sed(macOS环境)

macOS的sed语法略有不同,-i参数需要加空字符串:

find . -name pom.xml | xargs sed -i '' '
/<dependencies>/,/<\/dependencies>/{
  /<dependency>/{
    :process_dep
    /<\/dependency>/!{
      /scheduler/!{
        s/-SNAPSHOT//
      }
      n
      b process_dep
    }
  }
}'

脚本逻辑解释

我把整个逻辑拆成几步,方便你理解:

  • 锁定范围:只在<dependencies>到</dependencies>标签之间的内容里操作
  • 定位依赖节点:当遇到<dependency>开头时,进入循环处理整个依赖块
  • 条件替换:在当前依赖块内,逐行检查:
    • 如果当前行不包含指定关键词(这里是scheduler),就执行s/-SNAPSHOT//去掉后缀
    • 如果包含关键词,直接跳过替换
  • 循环到依赖结束:一直处理到</dependency>标签,再退出当前依赖的处理循环

调整关键词的方法

如果需要更换排除的关键词,只需要把脚本里的/scheduler/!换成你要的关键词即可。比如想排除含oauth的依赖,就改成/oauth/!。

效果验证

用你提供的pom.xml示例测试,运行脚本后:

  • 含scheduler的依赖(比如scheduler-service-core)的version保留了0.0.9-SNAPSHOT
  • 其他依赖(比如slf4j-api、oauth10a-client)的version分别变成了1.7.12和0.0.26,完全符合你的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:40:15