模式匹配并删除除最后一次出现之外的所有行

时间:2013-03-15 23:29:51

标签: unix

我有一个包含100多行的txt文件,我想搜索模式并删除除最后一次之外的所有行。

以下是txt文件中的行。

我的模式搜索是“string1 =”,“string2 =”,“string3 =”,“string4 =”和“string5 =”

string1=hi
string2=hello
string3=welcome
string3=welcome1
string3=
string4=hi
string5=hello

我想浏览每一行,并在文件中保持“string3 =”为空,并删除“string3 = welcome”,“string3 = welcome1”

请帮帮我。

2 个答案:

答案 0 :(得分:0)

对于单个模式,您可以从以下内容开始:

grep "string3" input | tail -1

答案 1 :(得分:0)

#!/usr/bin/perl

my %h;

while (<STDIN>) {
  my ($k, $v) = split /=/;
  $h{$k} = $v;
  }

foreach my $k ( sort keys %h ) {
  print "$k=$h{$k}";
  }

这里的perl脚本会将你的列表作为标准输入和进程输出。假设您希望将键(字符串*)作为排序输出。

如果您只想要以string1-5开头的值,那么您可以将匹配放在while循环的开头,如下所示:

next if ! /^string[1-5]=/;