在groovy中,如何替换特定行上的多个事件?

时间:2011-07-22 15:10:57

标签: regex groovy

我有一个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'
}

有没有一种活泼,更加时髦的方式来做到这一点?

2 个答案:

答案 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')}