regex - perl脚本删除下一行重复的单词

标签 regex perl perl-module

输入:

DFF_2 : dff_0_2 port map(READY_c => READY_c, CT0 =>CT0);
\DFF_0\ : dff_0 port map(un1_CT1 => un1_CT1, CT2 =>CT2);
DFF_10 : dff_0_10 port map(MRVQN1 => MRVQN1, un1_CT2_1 =>GSMC_un1_CT2_1);
DFF_1 : dff_0_1 port map(un1_CT2_1 =>GSMC_un1_CT2_1);
DFF_1 : dff_0_1 port map(un1_CT2_1 =>un1_CT2_1);

预期输出1:

DFF_2 : dff_0_2 port map(READY_c => READY_c, CT0 =>CT0);
\DFF_0\ : dff_0 port map(un1_CT1 => un1_CT1, CT2 =>CT2);
DFF_10 : dff_0_10 port map(MRVQN1 => MRVQN1, un1_CT2_1 =>GSMC_un1_CT2_1);
DFF_1 : dff_0_1 port map(un1_CT2_1 =>un1_CT2_1);

预期输出2:(不需要按顺序,但应该恢复更新的行)

DFF_1 : dff_0_1 port map(un1_CT2_1 =>un1_CT2_1);    
DFF_10 : dff_0_10 port map(MRVQN1 => MRVQN1, un1_CT2_1 =>GSMC_un1_CT2_1);
\DFF_0\ : dff_0 port map(un1_CT1 => un1_CT1, CT2 =>CT2);    
DFF_2 : dff_0_2 port map(READY_c => READY_c, CT0 =>CT0);

对于这种情况,我不能使用重复行删除 perl 脚本,因为字符串 word8 已用新字符串 word10 更新。我试过反转内容并应用要删除重复单词的行。但是,我的代码无法实现它。

open (IN, "<input.txt") or die;
open (OUT, ">output.txt") or die;
my @reverse = reverse <IN>;
foreach (@reverse){
print OUT "@reverse\n"; }
close (IN);
close (OUT);  

output:

DFF_1 : dff_0_1 port map(un1_CT2_1 =>un1_CT2_1);    
DFF_1 : dff_0_1 port map(un1_CT2_1 =>GSMC_un1_CT2_1);
DFF_10 : dff_0_10 port map(MRVQN1 => MRVQN1, un1_CT2_1 =>GSMC_un1_CT2_1);
\DFF_0\ : dff_0 port map(un1_CT1 => un1_CT1, CT2 =>CT2);    
DFF_2 : dff_0_2 port map(READY_c => READY_c, CT0 =>CT0);




open (IN1, "<output.txt") or die;
open (OUT1, ">output1.txt") or die;
while (<IN1>){
my $save = "$1" if /(.+)\s\:/;
next if /$save\s/;
print OUT1 $_;}
close (IN1);
close (OUT1;

但它没有按预期生成输出文件。请帮助我。

最佳答案

使用 hash for 来做到这一点。

在迭代循环时尝试使用 : 拆分行,因此使用模式匹配拆分行,如下所示 ^.+?\K\s:

^ 为比赛开始

+? 有助于避免 + 的贪婪。

\K 用于防止单词 split 。

然后将这两个数据存入$first$second。通过 $first 值创建散列键。它有助于删除重复项。然后最后将 uniq 值存储到 %hash 中,然后使用 grep 格式化散列。

open my $fh,"<","one.txt";
my %hash;
while (<$fh>)
{   
    ($first,$second) = split(/^.+?\K\s:/);
    $hash{$first} = " : $second";

}

my @ar = grep{ $_ =$_.$hash{$_} }keys %hash;
print @ar;

关于regex - perl脚本删除下一行重复的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36305741/

相关文章:

javascript - 如何交换字符串中的子字符串?

javascript - 我如何在javascript中只获取数字

javascript - 如何使用正则表达式将文本样式更改为特定模式?

使用标志进行 Perl 调试

perl - Excel::Writer::XLSX - 如何卡住第一行

regex - 正则表达式只删除特定嵌套级别的方括号中的文本?

c++ - 如何在 Perl 脚本中调用 C++ 程序?

python - 从 for 循环中更新外部范围变量值的最佳方法?

perl - mysql_skip_secure_auth 不跳过安全身份验证

perl - 设置 Perl 模块结构