GNU/Linux >> Tutoriels Linux >  >> Linux

Tout supprimer entre la deuxième et l'avant-dernière occurrence du match ?

J'ai une chaîne que je voudrais formater. Je voudrais tout supprimer entre le second ; et avant-dernier ; .

Entrée

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;  

Sortie

cellular organisms;Eukaryota;Tribolium castaneum;

J'ai essayé d'utiliser sed

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;"

produit

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;

Réponse acceptée :

Vous pouvez le faire facilement avec awk :

awk -F\; '{print $1 ";" $2 ";" $(NF-1) ";" $NF}'

Cela divise l'entrée en utilisant ; (-F\; ), et imprime le premier ($1 ), deuxième ($2 ), avant-dernier et dernier champs ($(NF-1) et $NF; NF contient le nombre de champs).

La variante suivante réutilise le séparateur de champ spécifié dans la sortie :

awk -F\; '{print $1 FS $2 FS $(NF-1) FS $NF}'

Janis a suggéré une version améliorée en utilisant OFS aussi :

awk 'BEGIN{FS=OFS=";"} {print $1,$2,$(NF-1),$NF}'

ou, si vous souhaitez conserver le séparateur comme autre paramètre :

awk -F\; 'BEGIN{OFS=FS} {print $1,$2,$(NF-1),$NF}'

Linux
  1. Différence entre le shell de connexion et le shell sans connexion ?

  2. Différence entre 2>&-, 2>/dev/null, |&, &>/dev/null et>/dev/null 2>&1 ?

  3. Quelle est la différence entre Sudo Su - et Sudo Su - ?

  4. Différence entre Eot et Eof?

  5. Différence entre [0-9], [[:digit:]] et D ?

Installer et supprimer des logiciels dans Manjaro

Différence entre apt et apt-get expliquée

La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

Différence entre l'expansion de la tuyauterie et de la commande ?

Différence entre l'utilisateur Sudo et l'utilisateur root ?

Vim vs Vi - Similitudes et différences entre VIM et VI ?