我正在使用此代码删除所有重复项,但我需要仅删除特定的重复项并保持其他所有副本不受影响。
在我的情况下,如果该行匹配/^\s+INDEX 00 \d\d:\d\d:\d\d$/
,则保留每个唯一的第一行,但删除重复项,并保留所有与正则表达式不匹配的行。
tie my @lines, 'Tie::File', $fn or die "could not tie file: $!";
my %seen;
@lines = grep(!$seen{$_}++, @lines);
untie @lines;
答案 0 :(得分:1)
tie my @lines, 'Tie::File', $fn or die "could not tie file: $!";
my %seen;
@lines = grep(!/^\s+INDEX 00 \d\d:\d\d:\d\d$/ || !$seen{$_}++, @lines);
untie @lines;
答案 1 :(得分:1)
@lines = ( $array[0],
grep { not /^\s+INDEX 00 \d\d:\d\d:\d\d$/ } @lines[1..$#lines] );
grep
grep
过滤掉与正则表达式@lines