GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Alles zwischen dem zweit- und zweitletzten Auftreten der Übereinstimmung entfernen?

Ich habe eine Zeichenfolge, die ich formatieren möchte. Ich möchte alles zwischen dem zweiten ; entfernen und vorletzter ; .

Eingabe

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;  

Ausgabe

cellular organisms;Eukaryota;Tribolium castaneum;

Ich habe versucht, sed zu verwenden

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

produziert

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;

Akzeptierte Antwort:

Das geht ganz einfach mit awk :

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

Dies teilt die Eingabe mit ; auf (-F\; ) und druckt die erste ($1 ), zweitens ($2 ), vorletztes und letztes Feld ($(NF-1) und $NF; NF enthält die Anzahl der Felder).

Die folgende Variante verwendet das angegebene Feldtrennzeichen in der Ausgabe erneut:

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

Janis schlug eine verbesserte Version mit OFS vor auch:

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

oder, wenn Sie das Trennzeichen als weiteren Parameter beibehalten möchten:

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

Linux
  1. Unterschied zwischen Login-Shell und Nicht-Login-Shell?

  2. Unterschied zwischen $HOME und '~' (Tilde)?

  3. Wie entferne ich diese Warnung:zweiter Parameter von „va_start“ nicht letztgenanntes Argument?

  4. Unterschied zwischen Cgroups und Namespaces

  5. Wie kann man die letzte Seite einer Reihe von PDFs extrahieren und/oder entfernen?

Software in Manjaro installieren und entfernen

Unterschied zwischen apt und apt-get erklärt

Unterschied zwischen [0-9], [[:digit:]] und D?

Unterschied zwischen Blockgröße und Clustergröße?

Unterschied zwischen Snat und Maskerade?

Vim vs. Vi – Ähnlichkeiten und Unterschiede zwischen VIM und VI?