1

我有一个包含 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”

请帮我。

4

2 回答 2

0

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

grep "string3" input | tail -1
于 2013-03-15T23:37:50.297 回答
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 脚本会将您的列表作为标准输入并处理您提到的输出。这假设您希望键 (string*) 作为排序输出。

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

next if ! /^string[1-5]=/;
于 2013-03-16T00:08:12.090 回答