模式匹配并删除除最后一次出现的所有行
Posted
技术标签:
【中文标题】模式匹配并删除除最后一次出现的所有行【英文标题】:pattern matching and delete all the lines except the last occurence 【发布时间】:2013-03-15 23:29:51 【问题描述】:我有一个包含 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"
请帮帮我。
【问题讨论】:
您必须编写一个程序来执行此操作。分享您目前编写的程序,并告诉我们您遇到的问题。 【参考方案1】:对于单个模式,您可以从以下内容开始:
grep "string3" input | tail -1
【讨论】:
【参考方案2】:#!/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]=/;
【讨论】:
以上是关于模式匹配并删除除最后一次出现的所有行的主要内容,如果未能解决你的问题,请参考以下文章