regex - 替换文件中的标记时的 Groovy 正则表达式

标签 regex string replace groovy

我有一个文本文件,里面到处都是标记“%%#%”。我正在尝试编写一个快速而肮脏的 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 .

注意我逃脱了 $ , 因为 replacereplaceAll行为不同,从某种意义上说 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/

相关文章:

python - 使用 re 在日志文件中查找字符串

mysql - 如何在 MYSQL 中修改此查询?

java - Java中带有换行符 "\n"的字符串=>如何转换为markdown?

python - 如何在 Python 中替换字符串中的标点符号?

java - 当模式涉及美元符号 ($) 时的正则表达式

c# - 对 RegEx 帮助不大

php - 如何在 PHP 中对字符串使用 += 运算符?

javascript - 如何获取字符串中两位数字的值

Javascript 正则表达式替换不起作用

r - 如何将R中除某些字母外的所有字母大写