删除第二次和倒数第二次匹配之间的所有内容



我有一个要格式化的字符串。我想删除秒之间的所有内容;倒数第二;。

输入

cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Protostomia;Ecdysozoa;Panarthropoda;Arthropoda;Mandibulata;Pancrustacea;Hexapoda;Insecta;Dicondylia;Pterygota;Neoptera;Endopterygota;Coleoptera;Polyphaga;Cucujiformia;Tenebrionoidea;Tenebrionidae;Tenebrionidae incertae sedis;Tribolium;Tribolium castaneum;

输出

cellular organisms;Eukaryota;Tribolium castaneum;

我试过了。

$ sed 's/;[^;]*//' <<<"cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Protostomia;Ecdysozoa;Panarthropoda;Arthropoda;Mandibulata;Pancrustacea;Hexapoda;Insecta;Dicondylia;Pterygota;Neoptera;Endopterygota;Coleoptera;Polyphaga;Cucujiformia;Tenebrionoidea;Tenebrionidae;Tenebrionidae incertae sedis;Tribolium;Tribolium castaneum;"    

产生

cellular organisms;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Protostomia;Ecdysozoa;Panarthropoda;Arthropoda;Mandibulata;Pancrustacea;Hexapoda;Insecta;Dicondylia;Pterygota;Neoptera;Endopterygota;Coleoptera;Polyphaga;Cucujiformia;Tenebrionoidea;Tenebrionidae;Tenebrionidae incertae sedis;Tribolium;Tribolium castaneum;    

非常感谢。

通过这样一个简单的字段选择,您可以使用split将字符串分离为多个字段,挑选出您想要的字段,并将它们与join放回一起。

请注意,必须为split的第三个参数提供一个负数,以防止它丢弃后面的空字段。

看起来像这个

use strict;
use warnings;
my $s = 'cellular organisms;Eukaryota;Opisthokonta;Metazoa;Eumetazoa;Bilateria;Protostomia;Ecdysozoa;Panarthropoda;Arthropoda;Mandibulata;Pancrustacea;Hexapoda;Insecta;Dicondylia;Pterygota;Neoptera;Endopterygota;Coleoptera;Polyphaga;Cucujiformia;Tenebrionoidea;Tenebrionidae;Tenebrionidae incertae sedis;Tribolium;Tribolium castaneum;';
my $ss = join ';', (split /;/, $s, -1)[0,1,-2,-1];
print $ss, "n";

输出

cellular organisms;Eukaryota;Tribolium castaneum;

您可以在Perl中使用此regexp

perl -pE's/;.*?K;.*(?=;.*;)//' <<<'cellular organisms;Eukaryota;Opisthokonta;...;Tribolium;Tribolium castaneum;'

相关内容

最新更新