Eu provavelmente usaria uma das opções já fornecidas pelo @slhck, mas aqui estão mais algumas maneiras de fazer isso:
Usando matrizes, como faria em qualquer outro idioma:
$ foo=( $(SayStuff) )
$ echo ${foo[2]}
cucumbers
O var=()
declara uma matriz, $(command)
salva a saída do comando. Então, foo=( $(SayStuff) )
armazena a saída de SayStuff
dentro da matriz foo
e você echo
é o terceiro elemento ${foo[2]}
.
sed
$ SayStuff | sed 's/.* \(.*\)/\1/'
cucumbers
O sed
comando substituirá ( s///
) tudo pela última palavra. A regex corresponde a qualquer espaço ( .*
) que corresponda a tudo até o último espaço e, em seguida, captura a última palavra (\(.*\)
. Como a palavra foi capturada, podemos nos referir a ela como \1
.
Uma versão mais simples:
$ SayStuff | sed 's/.* //'
cucumbers
bater
$ foo=$(SayStuff); echo ${foo##* }
cucumbers
Isso usa as habilidades de manipulação de string do bash, veja aqui para mais detalhes.
Mais festança
$ SayStuff | while read a b c; do echo $c; done
cucumbers
Perl, onde é claro, existem muitas maneiras de fazer isso:
$ SayStuff | perl -lane 'print $F[$#F]'
cucumber
As -a
marcas perl
se comportam como awk
, dividindo linhas no espaço em branco e salvando na matriz @F
. Em seguida, imprimimos o último elemento de @F
( $#F
é o número de elementos em @F
). O comando -l
diz ao perl para adicionar uma nova linha a cada print
instrução, a de -n
que ele deve processar STDIN linha por linha e de -e
executar o script fornecido na linha de comando.
$ SayStuff | perl -pe 's/.* //'
cucumber
As opções foram explicadas acima, estamos apenas excluindo tudo até o último espaço e impressão ( -p
).
$ perl -le 'print $ARGV[$#ARGV]' $(SayStuff)
cucumbers
Aqui estamos passando Watermelons and cucumbers
como argumentos, que perl salvará na @ARG
matriz e, portanto, imprimimos o último elemento de @ARG
.
truques. Este usa sed
para converter espaços em novas linhas e, em seguida, tail
imprimir apenas a última linha.
$ SayStuff | sed 's/ /\n/g' | tail -n 1
cucumbers
expressões regulares e grep, usando as -o
quais imprime apenas a sequência correspondente.
$ SayStuff | grep -Po '\w+$'
cucumbers
traindo
$ SayStuff | grep -o cucumbers
cucumbers
cut
não manipulará um número variável de espaços, enquanto oawk
faz.