我有一个文本文件,其中一组特定的连续行一次又一次出现。我需要修剪所有重复的事件,只打印第一次出现。
输入:
$ cat ……
贪婪地多次匹配你的阻止,只要所有接下来是另一个
perl -0777 -wpe's/(total.*)+(?=\1)//s' log_repeat.txt
前瞻确保一个(最后一个)保持不变,因为它不消耗它的匹配。
或者,通过丢弃它来保持第一场比赛 \K ,并删除其他人
\K
perl -0777 -wpe's/(total.*?)\K\1+//s' log_repeat.txt
注意 .*? 这里必须使用的是有区别的 .* 虽然可能不实用。
.*?
.*
问题在于替代 s/(^total.*)\1//gms 删除块对。 您可以通过使用前瞻一次只删除一个块来解决此问题:
s/(^total.*)\1//gms
perl -0777 -pe 's/(^total.*)(?=\1)//gms' log_repeat.txt