如何解决sed替换Maven pom.xml版本号时额外插入空格的问题
解决方法
问题根源
sa-pom.xml中<version>标签所在行存在前置缩进空格,原有sed正则仅匹配<version>...</version>标签内容,提取时会将标签行的前置缩进一同保留到newVersion变量中,写入目标文件时就会出现额外空格。
修正后代码
# 提取无空格的纯净版本号 newVersion=$(sed -r -n 's/^\s*<version>\s*([0-9.]+-SNAPSHOT)\s*<\/version>/\1/p' sa-pom.xml | head -n 1 | xargs) # 覆盖写入pom.xml sed -r -i 's/<version>\s*[0-9.]+\-SNAPSHOT\s*<\/version>/<version>'"${newVersion}"'<\/version>/g' ./pom.xml # 打印校验 echo "<version>${newVersion}</version>"
优化说明
- 正则新增
^\s*匹配标签行前置缩进、\s*匹配标签内部版本号前后的空白,捕获组仅保留版本号本身 head -n 1避免pom中存在多个<version>标签(比如parent节点的版本配置)导致提取结果重复xargs作为兜底处理,自动删除版本号前后的所有空白字符,保证结果纯净- 单个目标文件无需使用find遍历,直接调用sed处理即可,逻辑更简洁
内容的提问来源于stack exchange,提问作者JJB
相关产品推荐
相关产品推荐

