Encontrar el último artículo en una línea usando grep

12

Estoy tratando de tomar la última palabra o frase usando grep para un patrón específico. En este ejemplo, sería desde la última coma hasta el final de la línea:

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

Y así, el resultado deseado para esa línea sería "Gran valor". Todas las líneas también tienen diferentes longitudes, pero siempre tienen una coma que precede a las últimas palabras.

Básicamente, me gustaría simplemente salir desde la última coma hasta el final de la línea. ¡Gracias!

botella inversa
fuente
99
¿Has considerado usar awk -F, '{print $NF}'?
Steeldriver
Obtener el último elemento en la línea es una tarea fácil, pero ¿cómo se debe identificar esa línea? Quiero decir, ¿cómo puede un comando o script mirar la línea y decir "sí, ese es el indicado"? ¿Cuál es el patrón que identifica esa línea?
Sergiy Kolodyazhnyy
55
grepNo es la herramienta para este trabajo.
Kusalananda

Respuestas:

27

Aquí:

grep -o '[^,]\+$'
  • [^,]\+coincide con uno o más caracteres que no están ,al final de la línea ( $)

  • -o imprime solo la parte coincidente

Ejemplo:

% grep -o '[^,]\+$' <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
heemayl
fuente
¡Trabajado como un encanto! Estaba tratando de usar una combinación de "." y otras expresiones anteriores pero esto funciona mucho mejor, muy apreciado.
reversebottle el
hmm, me he utilizado -Eoy luego no se necesita para escapar de la+
Baldrickk
@Baldrickk -Ehabilita ERE, por eso.
heemayl el
@heemayl sí, sé por qué. Yo tiendo a usar, ya que es una sintaxis de expresiones regulares más comunes
Baldrickk
15

Siempre me gusta ver una awksolución, así que aquí está (¡votó por la solución adecuada!):

% awk -F, '{print $NF}'  <<<'Blah,3,33,56,5,Foo 30,,,,,,,3,Great Value'
Great Value
Paul Evans
fuente
3
Esta debería ser la respuesta correcta. Si bien puede usar grep, también puede clavar un tornillo con un martillo.
wilsotc