Cómo dividir una cadena en Shell y obtener el último campo
Supongamos que tengo la cadena 1:2:3:4:5
y quiero obtener su último campo ( 5
en este caso). ¿Cómo hago eso usando Bash? Lo intenté cut
, pero no sé cómo especificar el último campo con -f
.
Puedes utilizar operadores de cadena :
$ foo=1:2:3:4:5
$ echo ${foo##*:}
5
Esto recorta todo desde el frente hasta un ':', con avidez.
${foo <-- from variable foo
## <-- greedy front trim
* <-- matches anything
: <-- until the last ':'
}
Otra forma es invertir el antes y el después cut
:
$ echo ab:cd:ef | rev | cut -d: -f1 | rev
ef
Esto hace que sea muy fácil obtener el penúltimo campo, o cualquier rango de campos numerados desde el final.
Es difícil obtener el último campo usando cut, pero aquí hay algunas soluciones en awk y perl.
echo 1:2:3:4:5 | awk -F: '{print $NF}'
echo 1:2:3:4:5 | perl -F: -wane 'print $F[-1]'
Suponiendo un uso bastante simple (sin escape del delimitador, por ejemplo), puedes usar grep:
$ echo "1:2:3:4:5" | grep -oE "[^:]+$"
5
Desglose: busque todos los caracteres, excepto el delimitador ([^:]) al final de la línea ($). -o solo imprime la parte coincidente.
Podrías probar algo como esto si quieres usar cut
:
echo "1:2:3:4:5" | cut -d ":" -f5
También puedes usar grep
intentarlo así:
echo " 1:2:3:4:5" | grep -o '[^:]*$'