我有一个文本文件,里面到处都是标记“%%#%
”。我正在尝试编写一个快速而肮脏的 Groovy shell 脚本,用美元符号“%%#%
”替换“$
”的所有实例。
到目前为止,我有:
#!/usr/bin/env groovy
File f = new File('path/to/my/file.txt')
f.withWriter{ it << f.text.replace("%%#%", "$") }
但是当我运行这个脚本时,没有任何 react (没有异常(exception) 和 没有字符串替换)。我想知道我正在搜索的任何字符或美元符号本身是否被引擎盖下的正则表达式引擎解释为特殊字符。无论如何,我哪里出错了?
最佳答案
我必须先读取文件内容,然后再写入文件。好像withWriter
删除文件内容:
def f = new File('/tmp/file.txt')
text = f.text
f.withWriter { w ->
w << text.replaceAll("(?s)%%#%", /\$/)
}
你可能想做一个 per line read如果文件太大。否则,您可以使用该 multiline
(?s)
regex .注意我逃脱了
$
, 因为 replace
和 replaceAll
行为不同,从某种意义上说 replace
接受 char
因此,将不受正则表达式字符串的影响,而 replaceAll
将需要逃避。这是我的测试:
$ echo "%%#%
aaaa
bbbb
cccc%%#%dddd" > file.txt && groovy Subst.groovy && cat file.txt
$
aaaa
bbbb
cccc$dddd
关于regex - 替换文件中的标记时的 Groovy 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246034/