Recherche du dernier élément d'une ligne à l'aide de grep

12

J'essaie de prendre le dernier mot ou la dernière phrase en utilisant grep pour un motif spécifique. Dans cet exemple, il s'agirait de la dernière virgule à la fin de la ligne:

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

Et donc la sortie souhaitée pour cette ligne serait "Great Value". Toutes les lignes sont également de longueurs différentes, mais ont toujours une seule virgule précédant les derniers mots.

Fondamentalement, je voudrais simplement sortir de la dernière virgule à la fin de la ligne. Je vous remercie!

flacon inversé
la source
9
Avez-vous pensé à utiliser awk -F, '{print $NF}'?
Steeldriver
Obtenir le dernier élément de la ligne est une tâche facile, mais comment identifier cette ligne? je veux dire, comment une commande ou un script peut-il regarder la ligne et dire "oui, c'est celui-là"? quel est le motif qui identifie cette ligne?
Sergiy Kolodyazhnyy
5
grepn'est pas l'outil pour ce travail.
Kusalananda

Réponses:

27

Ici:

grep -o '[^,]\+$'
  • [^,]\+correspond à un ou plusieurs caractères qui ne sont pas ,à la fin de la ligne ( $)

  • -o imprime uniquement la partie correspondante

Exemple:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
heemayl
la source
A fonctionné comme un charme! J'essayais d'utiliser une combinaison de "." et d'autres expressions avant, mais cela fonctionne beaucoup mieux, très apprécié.
reversebottle
hmm, j'aurais utilisé -Eoet ensuite pas eu besoin d'échapper à la+
Baldrickk
@Baldrickk -Epermet l'ERE, c'est pourquoi.
heemayl
@ heemayl ouais, je sais pourquoi. J'ai tendance à l'utiliser car c'est une syntaxe regex plus courante
Baldrickk
15

awkJ'aime toujours voir une solution, alors la voici (a voté pour la bonne solution!):

% awk -F, '{print $NF}'  <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
Paul Evans
la source
3
Ce devrait être la bonne réponse. Bien que vous puissiez utiliser grep, vous pouvez également enfoncer une vis avec un marteau.
wilsotc