如何从perl中的无限字符串中删除重复的子字符串?

时间:2014-01-24 20:25:51

标签: regex string perl

我有一个奇怪的情况,我想删除除了非常长的无限字符串内的子串的第一个匹配。我在这里找到了一些类似的主题,但没有一个像我一样。

为了简单起见,这里有一些字符串之前和之后的sudo。 我有一个不受限制的文件,其中“c”可能是数千个随机字符,但“bbb”是一个唯一的字符串:

aaabbbbbbccccccbbbccccccbbbccccccaaa

我想删除除第一个bbb以外的所有内容:

aaabbbccccccccccccccccccaaa

此外,我希望能够将其用作我可以通过的perl脚本:

cat file.in | something | perl -pe 's/bbb//g' | somethingelse > file.out

但是,与上面的例子不同,我希望第一次出现“bbb”完整。“

这似乎应该相当容易,但它让我感到难过 任何想法?
提前谢谢!

2 个答案:

答案 0 :(得分:5)

也许以下内容会有所帮助:

use strict;
use warnings;

my $string = 'aaabbbbbbccccccbbbccccccbbbccccccaaa';
$string =~ s/(?<=bbb).*?\Kbbb//g;
print $string;

输出:

aaabbbccccccccccccccccccaaa

答案 1 :(得分:3)

my $string = 'aaabbbbbbccccccbbbccccccbbbccccccaaa'; 
my $seen; 
sub first { 
  $seen++; 
  return $_[0] if $seen eq 1; 
  return '';
} 
$string =~ s/(bbb)/first($1)/ge;
say $string;

输出:

  

aaabbbccccccccccccccccccaaa