我有一个build.properties文件,如:
foo=bar/1.1
start=/data/home/hudson/Project-1.1/workspace/1.1
fred=wilma/workspace/1.1
仅在第二行,我想用2.2替换所有1.1,给出:
start=/data/home/hudson/Project-2.2/workspace/2.2
我想出了一种在groovy中做到这一点的方法,但我感觉我错了:
String result = ''
text.eachLine { line ->
if (line =~ /(?m)start=/)
result += line.replaceAll('1.1', '2.2') + '\n'
else
result += line + '\n'
}
有没有一种活泼,更加时髦的方式来做到这一点?
答案 0 :(得分:2)
如果您的文件位于变量text
中,请执行以下操作:
def text = '''\
foo=bar/1.1
start=/data/home/hudson/Project-1.1/workspace/1.1
fred=wilma/workspace/1.1'''
或通过做:
def text = new File( 'props.properties' ).text
然后,一种方法(我相信有更多方法可以做到这一点),就是这样做:
String result = text.readLines().collect {
it ==~ /^start=.*$/ ? it.replaceAll( '1.1', '1.2' ) : it
}.join( '\n' )
readLines
将文本拆分为字符串列表(每行一个),然后将collect
拆分为原始行或替换行的新列表(如果以{开头) {1}})。然后,再次将这个字符串列表与它们之间的start=
字符串连接成一个字符串。
希望这是有道理的,是你所追求的?
答案 1 :(得分:0)
f =新文件('test1') f.withReader {f.write it.readLine()。replaceAll('1.1','2.2')}