Probablemente usaría una de las opciones que ya ofrece @slhck, pero aquí hay algunas formas más de hacerlo:
Usando matrices, como lo haría en cualquier otro idioma:
$ foo=( $(SayStuff) )
$ echo ${foo[2]}
cucumbers
El var=()
declara una matriz, $(command)
guarda la salida del comando. Por lo tanto, foo=( $(SayStuff) )
almacena la salida de SayStuff
en la matriz foo
y luego echo
es su tercer elemento con ${foo[2]}
.
sed
$ SayStuff | sed 's/.* \(.*\)/\1/'
cucumbers
El sed
comando sustituirá ( s///
) todo con la última palabra. La expresión regular coincide con cualquier cosa hasta un espacio ( .*
) que coincidirá con todo hasta el último espacio y luego captura la última palabra (\(.*\)
. Como la palabra ha sido capturada, podemos referirnos a ella como \1
.
Una versión más simple:
$ SayStuff | sed 's/.* //'
cucumbers
golpetazo
$ foo=$(SayStuff); echo ${foo##* }
cucumbers
Esto usa las habilidades de manipulación de cadenas de bash, vea aquí para más detalles.
Más bash
$ SayStuff | while read a b c; do echo $c; done
cucumbers
Perl, donde, por supuesto, hay muchas maneras de hacer esto:
$ SayStuff | perl -lane 'print $F[$#F]'
cucumber
Las -a
marcas se perl
comportan como awk
, dividiendo líneas en espacios en blanco y guardando en la matriz @F
. Luego imprimimos el último elemento de @F
( $#F
es el número de elementos en @F
). El -l
le dice a Perl que agregue una nueva línea a cada print
instrucción, -n
que debe procesar STDIN línea por línea y -e
que debe ejecutar el script dado en la línea de comando.
$ SayStuff | perl -pe 's/.* //'
cucumber
Las opciones se explicaron anteriormente, simplemente estamos eliminando todo hasta el último espacio e imprimiendo ( -p
).
$ perl -le 'print $ARGV[$#ARGV]' $(SayStuff)
cucumbers
Aquí estamos pasando Watermelons and cucumbers
como argumentos, que Perl guardará en la @ARG
matriz y, por lo tanto, imprimimos el último elemento de @ARG
.
astucia. Este se usa sed
para convertir espacios en nuevas líneas y luego tail
para imprimir solo la última línea.
$ SayStuff | sed 's/ /\n/g' | tail -n 1
cucumbers
grep y expresiones regulares, con las -o
cuales imprime solo la cadena coincidente.
$ SayStuff | grep -Po '\w+$'
cucumbers
engañando
$ SayStuff | grep -o cucumbers
cucumbers
cut
no manejará un número variable de espacios, mientras que loawk
hará.