蓝山帝景
取指定字符之前的字符的方法是: perl -nle 'if(/^start:/ or /^end:/){ # 匹配 flag /([^:]+:)(.*)?\(?/; # 正则捕获$1,$2,其中$1是start: 或 end:,$2是'('之前的部分 if($1 eq "start:"){push @{$hash{$1}},$2;$s=$2;} # 如果$1是start:的话,存入key为$1,值为$2的hash中,另外,再保留一份$2给临时变量$s, else{$hash{$s} = $1.$2} # 如果$1不是start:,即是end:, 则存入key为$s,值为$1.$2到hash中 }; END{ use Data::Dumper; print Dumper \%hash; # 可以看下hash的结构是什么,应该会理解下面foreach的block部分 foreach (sort {$a cmp $b} @{$hash{"start:"}}){ print "start: ",$_,"\t",$hash{$_} } }' file