Tengo una cadena separada por espacios que se emite mediante un comando, que me gusta canalizar cut
, usando -fd ' '
para dividir en espacios. Sé que puedo usar -f <n>
para mostrar el número de campo <n>
, pero ¿puedo hacer que muestre el último campo si no sé la longitud de la cadena?
¿O necesito usar una herramienta de edición de texto más flexible como sed
o awk
?
command-line
cut-command
Arronico
fuente
fuente
-n
convierte en n desde el principio,n-
es desde n hasta el final, y existe la--complement
opción que invierte la selección. Pero no hay manera de contar el número de campos y actuar sobre él hasta donde puedo decir.Respuestas:
No
cut
, no puedo hacer eso. Podrías usar dosrev
comandos, comopero generalmente es más fácil de usar
awk
:fuente
Puede hacer esto usando solo shell, no se necesita ninguna herramienta externa, usando la expansión de parámetros:
var##*
descartará todo, desde el inicio hasta el último espacio del parámetro (variable)var
.Si el delimitador puede ser cualquier espacio en blanco, por ejemplo, espacio o tabulación, use la clase de caracteres
[:blank:]
:Ejemplo:
fuente
Personalmente, me gusta la respuesta de Florian Diesch. Pero hay de esta manera también.
Explicación:
wc -w
da la cantidad de palabras. ycut
corta la última palabraEDITAR:
Pensé en otra forma de hacerlo:
fuente
a="my string here"
, también podría usar la expansión de parámetros${a##* }
.Aquí hay uno usando
grep
Cómo funciona:
-o
Imprimir solo las partes coincidentes (no vacías) de una línea coincidente.[^ ]*$
coincide con cualquier cosa desde el final hasta que encuentra un espacio.Otro trazador de líneas de Glenn Jackman usando Perl
fuente