如何修改文件指定行版本号并避免生成多余空行?
解决Groovy修改指定行后生成文件出现多余空行的问题
需求
找到文件中以IMAGE_VERSION_CPO=开头的行,将其后的版本号替换为1.90.12.1,其余行保持原样。
源文件内容
IMAGE_VERSION_TD_S=1.108.1.1 IMAGE_VERSION_CPO=1.87.13.1 IMAGE_VERSION_CVM=1.71.1.1
期望输出文件
IMAGE_VERSION_TD_S=1.108.1.1 IMAGE_VERSION_CPO=1.90.12.1 IMAGE_VERSION_CVM=1.71.1.1
问题代码(执行后会生成多余空行)
def data = readFile(file: pathEnv) def lines = data.readLines() def strNewEnv = '' lines.each { String line -> if (line.startsWith("IMAGE_VERSION_CPO=")) { strNewEnv = strNewEnv + '\n' + 'IMAGE_VERSION_CPO=' + imageVersion } else { strNewEnv = strNewEnv + '\n' + line } println line } println strNewEnv writeFile file: directoryPortal+"/${params.ENVIROMENT}/"+envFile, text: strNewEnv
问题原因
这段代码每次拼接字符串时都先加\n,导致最终生成的字符串开头多了一个换行符,写入文件后就会出现多余的空行。
修复后的代码
def data = readFile(file: pathEnv) def targetVersion = '1.90.12.1' // 遍历每行,替换目标行内容 def lines = data.readLines().collect { line -> line.startsWith('IMAGE_VERSION_CPO=') ? "IMAGE_VERSION_CPO=${targetVersion}" : line } // 用换行符拼接所有行,避免多余空行 def strNewEnv = lines.join('\n') println strNewEnv writeFile file: "${directoryPortal}/${params.ENVIROMENT}/${envFile}", text: strNewEnv
修复说明
- 使用
collect方法遍历每行,直接返回修改后的行或原行,代码更简洁易读 - 通过
join('\n')拼接所有行,从根源避免了手动拼接时出现的开头空行问题 - 将目标版本号单独定义,后续修改版本时只需改动一处即可
内容的提问来源于stack exchange,提问作者Aldo Inácio da Silva
相关产品推荐
相关产品推荐

