Obtener la última parte de la cadena después del guión

10

¿Existe una línea de comando simple para extraer la última parte de una cadena separada por guiones? Por ejemplo, quiero extraer 123de foo-bar-123.

Steven
fuente

Respuestas:

23

Puede usar la expansión de parámetros de Bash :

string="foo-bar-123" && printf "%s\n" "${string##*-}"
123

Si quieres usar otro proceso, con Awk:

echo "foo-bar-123" | awk -F- '{print $NF}'

O, si prefieres Sed:

echo "foo-bar-123" | sed 's/.*-//'

Un proceso externo más ligero, como sugiere Glenn Jackman, es cut:

cut -d- -f3 <<< "$string"
jasonwryan
fuente
la expansión de parámetros de shell es la mejor respuesta. Una herramienta externa liviana es cut:cut -d- -f3 <<< "$string"
Glenn Jackman
1
@glennjackman - re: cut; de hecho, pero solo si se conoce el número del último campo (ya que la pregunta es un poco ambigua: ¿Hay una línea de comando simple para extraer la última parte ...? )
don_crissti
2
@don_crissti, de hecho. Uno podría hacerlo rev <<< "$string" | cut -d- -f1 | rev, pero luego nos estamos desviando de la simplicidad de la expansión de parámetros.
Glenn Jackman
3
grep -Po '(?<=\w-)\w+(?=$|[\s.,])'
JJoao
fuente
1
echo "foo-bar-123"| awk -F"-" '{print $3}' 
rcjohnson
fuente