Groovy读取Unix进程输出时如何去除换行符?
解决Groovy脚本中进程输出拼接时的换行问题
这个问题我之前碰到过类似的坑!核心原因是你通过execute().text获取的Unix命令输出,默认会带上换行符(比如\n或者\r\n),而你手动赋值的字符串"2017"没有这个隐藏的换行字符,所以拼接后的结果会出现换行拆分的情况。
下面给你几个简单有效的解决方案:
方法一:用trim()去除首尾空白字符
这是最直接的方式,trim()会移除字符串开头和结尾的所有空白字符(包括换行、空格、制表符等),完美解决换行问题:
def text = ['bash', '-c', command_to_execute].execute().text.trim() def concatanated_text = "${var1}.${var2}.${text}.full.zip"
方法二:精准替换换行符(保留其他首尾空格)
如果你需要保留输出首尾的空格,只是要去掉换行符,可以用正则替换:
def text = ['bash', '-c', command_to_execute].execute().text.replaceAll(/[\n\r]/, '') def concatanated_text = "${var1}.${var2}.${text}.full.zip"
正则表达式[\n\r]会匹配所有换行相关的字符(包括Unix的\n和Windows的\r\n),将它们替换为空字符串。
验证示例
你可以用这段代码测试效果,模拟带换行的命令输出:
// 模拟命令输出带换行的情况(echo默认会输出换行) def command_to_execute = 'echo 2017' def text = ['bash', '-c', command_to_execute].execute().text println "原始text内容(带换行):'${text}'" println "原始text长度:${text.length()}" // 输出4,因为包含"2017\n" // 用trim处理后 text = text.trim() println "处理后text内容:'${text}'" println "处理后text长度:${text.length()}" // 输出3,只剩"2017" // 拼接测试 def var1 = 'file' def var2 = 'name' def concatanated_text = "${var1}.${var2}.${text}.full.zip" println "拼接结果:${concatanated_text}" // 输出file.name.2017.full.zip
内容的提问来源于stack exchange,提问作者Janeth Fernando
相关产品推荐
相关产品推荐

