我有一个 build.properties 文件,例如:
foo=bar/1.1
start=/data/home/hudson/Project-1.1/workspace/1.1
fred=wilma/workspace/1.1
仅在第 2 行,我想用 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'
}
有没有更快捷、更时髦的方法来做到这一点?
最佳答案
如果您的文件在变量 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
到一个新列表中,原始行或替换行(如果它以 start=
开头)。然后,将这个字符串列表与它们之间的 \n
字符重新连接成一个字符串。
希望这是有道理的,这是您想要的吗?
关于regex - 在常规中,如何替换特定行上的多次出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6792065/