Ant替换不以.开头的文件文本

Rob*_*ert 1 regex ant file-io regex-negation

我想创建一个ant目标,它可以替换不以定义模式开头的文件(或更多)的内容.有没有使用ant和replaceregexp的解决方案?或者替代这个?例:

  • 我有文件boo.txt,其中包含文字:"这是嘘".
  • 我还有文件foo.txt,其中包含文本:"just foo".

我想将foo.txt的文本更改为:"这只是foo"

mar*_*ton 7

可能是一个用捕获来制作合适的正则表达式的情况.

这个似乎适用于你给出的例子.

<property name="prefix" value="this " />
<replaceregexp flags="s" match="^(${prefix})?(.*)" replace="${prefix}\2">
    <fileset dir="files" />
</replaceregexp>
Run Code Online (Sandbox Code Playgroud)
  • 使用文件集指定文件 - 此处是files目录中的所有文件.
  • 我们希望可选择添加的前缀this是存储在属性中的,因为我们需要在两个地方提及它.
  • flags="s"设置确保我们将文件视为单个字符串以进行匹配(而不是匹配每一行).
  • 正则表达式在文件中查找前缀字符串,并将其存储在捕获中\1- 将其丢弃.
  • 字符串的其余部分处于捕获状态\2.
  • 替换为前缀字符串,然后捕获\2.

您可能会认为它总是添加前缀,但是如果它已经存在则取消前缀 ...除了replaceregexp任务不会写入文件,除非它与现有文件不同.