GNU/Linux >> Linux Esercitazione >  >> Linux

Rimuovere tutto tra la penultima e la penultima occorrenza della partita?

Ho una stringa che vorrei formattare. Vorrei rimuovere tutto tra il secondo ; e penultimo ; .

Ingresso

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;  

Uscita

cellular organisms;Eukaryota;Tribolium castaneum;

Ho provato a usare 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;"

produce

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;

Risposta accettata:

Puoi farlo facilmente con awk :

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

Questo divide l'input usando ; (-F\; ) e stampa il primo ($1 ), secondo ($2 ), penultimo e ultimo campo ($(NF-1) e $NF; NF contiene il numero di campi).

La variante seguente riutilizza il separatore di campo specificato nell'output:

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

Janis ha suggerito una versione migliorata utilizzando OFS anche:

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

oppure, se vuoi mantenere il separatore come un altro parametro:

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

Linux
  1. La differenza tra [[ $a ==Z* ]] e [ $a ==Z* ]?

  2. Differenza tra utente Sudo e utente root?

  3. Differenza tra Snat e Masquerade?

  4. Differenza tra $HOME e '~' (tilde)?

  5. Come rimuovere questo avviso:secondo parametro di "va_start" non l'ultimo argomento nominato?

Differenza tra apt e apt-get spiegato

Differenza tra dimensione del blocco e dimensione del cluster?

Differenza tra tubazioni ed espansione dei comandi?

Come trovare l'ultima occorrenza del motivo e stampare tutte le righe dopo l'ultima occorrenza?

Vim vs Vi:somiglianze e differenze tra VIM e VI?

Come estrarre e/o rimuovere l'ultima pagina di un mucchio di PDF?