Trovare l'ultimo elemento in una riga usando grep


12

Sto tentando di prendere l'ultima parola o frase usando grep per uno schema specifico. In questo esempio, sarebbe il dall'ultima virgola alla fine della riga:

Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value

E quindi l'output desiderato per quella riga sarebbe "Great Value". Tutte le linee hanno anche lunghezze diverse, ma hanno sempre una virgola che precede le ultime parole.

Fondamentalmente, vorrei semplicemente output dall'ultima virgola alla fine della riga. Grazie!


9
Hai preso in considerazione l'utilizzo awk -F, '{print $NF}'?
Steeldriver

Ottenere l'ultimo elemento sulla riga è un'operazione facile, ma come dovrebbe essere identificata quella riga? Voglio dire, come può un comando o uno script guardare la linea e dire "sì, è quello"? qual è il modello che identifica quella linea?
Sergiy Kolodyazhnyy,

5
grepnon è lo strumento per questo lavoro.
Kusalananda

Risposte:


27

Qui:

grep -o '[^,]\+$'
  • [^,]\+corrisponde a uno o più caratteri che non si trovano ,alla fine della riga ( $)

  • -o stampa solo la parte corrispondente

Esempio:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value

Ha funzionato come un fascino! Stavo cercando di usare una combinazione di "." e altre espressioni prima ma questo funziona molto meglio, molto apprezzato.
reversebottle

hmm, avrei usato -Eoe quindi non avrei dovuto scappare da+
Baldrickk il

@Baldrickk -Eabilita ERE, ecco perché.
heemayl

@heemayl sì, so perché. Tendo a usarlo in quanto è una sintassi regex più comune
Baldrickk,

15

awkMi piace sempre vedere una soluzione, quindi eccola (votata la soluzione corretta!):

% awk -F, '{print $NF}'  <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value

3
Questa dovrebbe essere la risposta corretta. Mentre puoi usare grep, puoi anche guidare una vite con un martello.
Wilsotc,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.