Suchen des letzten Elements in einer Zeile mit grep

12

Ich versuche, das letzte Wort oder die letzte Phrase mit grep für ein bestimmtes Muster zu nehmen. In diesem Beispiel ist es das vom letzten Komma bis zum Ende der Zeile:

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

Die gewünschte Ausgabe für diese Zeile wäre also "Great Value". Alle Zeilen sind ebenfalls unterschiedlich lang, haben jedoch immer ein einzelnes Komma vor den letzten Wörtern.

Grundsätzlich möchte ich einfach vom letzten Komma bis zum Zeilenende ausgeben. Vielen Dank!

Wendeflasche
quelle
9
Hast du schon mal darüber nachgedacht awk -F, '{print $NF}'?
Steeldriver
Das letzte Element in der Linie zu bekommen ist eine leichte Aufgabe, aber wie sollte diese Linie identifiziert werden? Ich meine, wie kann ein Befehl oder ein Skript in die Zeile schauen und sagen "Ja, das ist der eine"? Was ist das Muster, das diese Linie kennzeichnet?
Sergiy Kolodyazhnyy
5
grepist nicht das Werkzeug für diesen Job.
Kusalananda

Antworten:

27

Hier:

grep -o '[^,]\+$'
  • [^,]\+stimmt mit einem oder mehreren Zeichen überein, die nicht ,am Ende der Zeile stehen ( $)

  • -o druckt nur den passenden Teil

Beispiel:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
heemayl
quelle
Lief wie am Schnürchen! Ich habe versucht, eine Kombination aus "." und andere Ausdrücke vor, aber das funktioniert viel besser, sehr geschätzt.
Reversebottle
hmm, ich hätte verwendet -Eound dann nicht gebraucht, um zu entkommen+
Baldrickk
@Baldrickk aktiviert -EERE, deshalb.
Heemayl
@heemayl ja, ich weiß warum. Ich neige dazu, es zu verwenden, da es eine allgemeinere Regex-Syntax ist
Baldrickk
14

awkMöchte immer eine Lösung sehen, also hier ist sie (die richtige Lösung!):

% awk -F, '{print $NF}'  <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
Paul Evans
quelle
3
Dies sollte die richtige Antwort sein. Während Sie grep verwenden können, können Sie auch eine Schraube mit einem Hammer schlagen.
Wilsotc