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

mayingbao 阅读:35 2025-02-15 21:57:57 评论:0

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


声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号