groovy:如何从以非唯一字符串开头的文件中删除行

时间:2018-03-17 02:12:32

标签: regex groovy-console

***显示顺序的编辑示例不是因素

我有一个包含内容的文件:

ABC-123 BLA bla</br>
ABC-123 lala lala</br>
ABC-234 AAA</br>
ABC-123 CCC</br>
ABC-567 ddd</br>
ABC-234 BBB</br></br>

我想删除前面一行以相同字符串开头的行,最后是一个包含(或包含String)的文件:

ABC-123 BLA bla 
ABC-234 AAA
ABC-567 ddd

目前我的代码只是将文件的内容保存为字符串:

if (new File('description.txt').length() > 0 ) {
    description = new File('description.txt').text
}

我想更新文件或保存第一个“非唯一”行以及描述字符串中的唯一行。

1 个答案:

答案 0 :(得分:0)

Groovy使用java正则表达式引擎,但regex101上的示例几乎与您需要的相同 - 可能只是使用双反斜杠而不是单反斜杠。您还需要在开头使用多行支持修饰符(?m)

/(^\S+ )([^\n]*\n)\1([^\n]*\n)/

<强>解释

(^\S+ )匹配行开头的非空格,后跟空格。它被捕获为组#1

([^\n]*\n)与换行符之外的所有内容匹配

\1是一个反向引用,用于匹配组#1中匹配的任何内容

再次

([^\n]*\n)第二行的其余部分

然后替换与$1$2匹配的第一个和第二个捕获组。