我有一个file.txt,其中包含
##---A1--- a1.la a2.la a3.la ##---B1-- b1.la b3.la ##---C1-- c1.la c2.la c3.la c4.la
我想写一个Groovy脚本,以便更新Array值
Main = [A1 B1 C1] A1 = [a1.la b1.la c1.la] B1 = [b1.la b3.la] C1 = [c1.la c2.la c3.la c4.la]
编辑:需要在Jenkinsfile中实现此功能
nwsw7zdq1#
下面是使用vanilla Groovy的方法
def result = new File('file.txt').text.readLines().inject([result: [:].withDefault { k -> [] }, current: null]) { acc, line -> if (line.startsWith('##---')) { def token = line.replaceAll('[#-]', '') acc.result['Main'] << token [result: acc.result, current: token] } else if (acc.current) { acc.result[acc.current] << line acc } }.result
result是一个Map
result
[ Main:[A1, B1, C1], A1:[a1.la, a2.la, a3.la], B1:[b1.la, b3.la], C1:[c1.la, c2.la, c3.la, c4.la] ]
不确定Jenkins是否允许上述操作
xienkqul2#
使用这种方法,您可以在一个正则表达式中捕获整个内容,然后聚合结果
import java.util.regex.Matcher String test = """\ ##---A1--- a1.la a2.la a3.la ##---B1-- b1.la b3.la ##---C1-- c1.la c2.la c3.la c4.la """ Matcher matcher = test =~/(?ms)##---(..)-+\n((?:[^#]+?\n)+)/ Map result = ['Main' : matcher.collect { all, name, list -> name }] matcher.each { all, name, list -> result[name] = list.readLines() }
通过result.each { println it }打印结果会导致:
result.each { println it }
Main=[A1, B1, C1] A1=[a1.la, a2.la, a3.la] B1=[b1.la, b3.la] C1=[c1.la, c2.la, c3.la, c4.la]
2条答案
按热度按时间nwsw7zdq1#
下面是使用vanilla Groovy的方法
result
是一个Map不确定Jenkins是否允许上述操作
xienkqul2#
使用这种方法,您可以在一个正则表达式中捕获整个内容,然后聚合结果
通过
result.each { println it }
打印结果会导致: