GNU/Linux >> Linux Esercitazione >  >> Linux

Riga di comando:estrai la sottostringa dall'output

$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers

Il -d ' ' dice cut dividere sugli spazi. -f 3 seleziona la terza colonna.

Puoi anche usare awk , che esegue già la suddivisione in base allo spazio e rende disponibili le colonne come $1 , $2 , …

$ echo "Watermelons and cucumbers" | awk '{ print $3 }'
cucumbers

Probabilmente userei una delle opzioni già fornite da @slhck, ma qui ci sono altri modi per farlo:

  1. Utilizzando gli array, come faresti in qualsiasi altro linguaggio:

    $ foo=( $(SayStuff) ) 
    $ echo ${foo[2]}
    cucumbers
    

    Il var=() dichiara un array, $(command) salva l'output del comando. Quindi, foo=( $(SayStuff) ) memorizza l'output di SayStuff nell'array foo e poi echo è il terzo elemento con ${foo[2]} .

  2. sed

    $ SayStuff | sed 's/.* \(.*\)/\1/'
    cucumbers
    

    Il sed comando sostituirà (s/// ) tutto con l'ultima parola. L'espressione regolare corrisponde a qualsiasi cosa fino a uno spazio (.* ) che corrisponderà a tutto fino all'ultimo spazio e quindi catturerà l'ultima parola (\(.*\) . Poiché la parola è stata catturata, possiamo riferirci ad essa come \1 .

    Una versione più semplice:

    $ SayStuff | sed 's/.* //'
    cucumbers
    
  3. bash

    $ foo=$(SayStuff); echo ${foo##* } 
    cucumbers
    

    Questo usa le capacità di manipolazione delle stringhe di bash, vedi qui per maggiori dettagli.

  4. Ancora bash

    $ SayStuff | while read a b c; do echo $c; done
    cucumbers
    
  5. Perl, dove ovviamente ci sono molti modi per farlo:

    $ SayStuff | perl -lane 'print $F[$#F]'
    cucumber
    

    Il -a rende perl comportarsi come awk , dividendo le righe negli spazi bianchi e salvandole nell'array @F . Quindi stampiamo l'ultimo elemento di @F ($#F è il numero di elementi in @F ). Il -l dice a perl di aggiungere una nuova riga a ogni print istruzione, il -n che dovrebbe elaborare STDIN riga per riga e -e che dovrebbe eseguire lo script fornito nella riga di comando.

    $ SayStuff | perl -pe 's/.* //'
    cucumber
    

    Le opzioni sono state spiegate sopra, stiamo solo cancellando tutto fino all'ultimo spazio e stampando (-p ).

    $ perl -le 'print $ARGV[$#ARGV]' $(SayStuff)
    cucumbers
    

    Qui stiamo superando Watermelons and cucumbers come argomenti, che perl salverà nel @ARG array e quindi, stampiamo l'ultimo elemento di @ARG .

  6. inganno. Questo usa sed per convertire gli spazi in newline e poi tail per stampare solo l'ultima riga.

    $ SayStuff | sed 's/ /\n/g' | tail -n 1
    cucumbers
    
  7. grep ed espressioni regolari, utilizzando -o che stampa solo la stringa corrispondente.

    $ SayStuff | grep -Po '\w+$' 
    cucumbers
    
  8. barare

    $ SayStuff | grep -o cucumbers
    cucumbers
    

Ecco qualche altra spiegazione:

Usage: cut OPTION... [FILE]...

Print selected parts of lines from each FILE to standard output.

   -d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter

   -f, --fields=LIST
          select only these fields;  also print any line that contains  no
          delimiter character, unless the -s option is specified

Quindi se hai bisogno del 3° campo ed è delimitato da spazi '' ' allora lo è

$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3  
cucumbers

Se vuoi il ULTIMO probabilmente dovresti usare awk .
In questo caso diventa:

$ echo "Angurie e cetrioli" | awk '{ stampa $NF }'
cetrioli

In awk NF è il numero di campi nella riga, quindi $NF indica l'ultimo campo della riga.


Linux
  1. Come dire a quale versione di Os X mi trovo dalla riga di comando?

  2. Come modificare l'uscita audio in HDMI dalla riga di comando?

  3. Come estrarre il tempo di durata dall'output di ffmpeg?

  4. Omissione della prima riga da qualsiasi output di comando Linux

  5. scarica le immagini da google con la riga di comando

Programma hardware dalla riga di comando di Linux

Come estrarre o decomprimere i file tar.gz dalla riga di comando di Linux

Cerca prodotti Amazon dalla riga di comando

Come estrarre il file Tar.xz sulla riga di comando di Linux

Linux:come cambiare in modo affidabile il dispositivo di uscita Pulseaudio dalla riga di comando?

Invia e-mail in Linux dalla riga di comando