Я бы, вероятно, использовал один из вариантов, уже предоставленных @slhck, но вот еще несколько способов сделать это:
Используя массивы, как на любом другом языке:
$ foo=( $(SayStuff) )
$ echo ${foo[2]}
cucumbers
var=()
Объявляет массив, $(command)
сохраняет вывод команды. Таким образом, foo=( $(SayStuff) )
сохраняет вывод SayStuff
в массив foo
и yuou, тогда echo
это третий элемент с ${foo[2]}
.
sed
$ SayStuff | sed 's/.* \(.*\)/\1/'
cucumbers
Команда sed
подставит ( s///
) все с последним словом. Регулярное выражение сопоставляет что угодно, вплоть до пробела ( .*
), которое будет соответствовать всему, вплоть до последнего пробела, а затем захватывает последнее слово (\(.*\)
. Поскольку слово было захвачено, мы можем ссылаться на него как \1
.
Более простая версия:
$ SayStuff | sed 's/.* //'
cucumbers
удар
$ foo=$(SayStuff); echo ${foo##* }
cucumbers
При этом используются возможности манипуляции со строками в bash, подробности см. Здесь .
Больше Баш
$ SayStuff | while read a b c; do echo $c; done
cucumbers
Perl, где, конечно, есть много способов сделать это:
$ SayStuff | perl -lane 'print $F[$#F]'
cucumber
В -a
марке perl
ведет себя как awk
, расщепление линии на пробельном и сохранении в массив @F
. Затем мы печатаем последний элемент @F
( $#F
это количество элементов в @F
). -l
Говорит Perl , чтобы добавить новую строку в каждом print
заявлении, -n
что он должен обрабатывать STDIN построчно и -e
что он должен запустить скрипт заданный в командной строке.
$ SayStuff | perl -pe 's/.* //'
cucumber
Опции были объяснены выше, мы просто удаляем все до последнего пробела и печатаем ( -p
).
$ perl -le 'print $ARGV[$#ARGV]' $(SayStuff)
cucumbers
Здесь мы передаем в Watermelons and cucumbers
качестве аргументов, которые Perl будет сохранять в @ARG
массиве, и поэтому мы печатаем последний элемент @ARG
.
обман. Этот используется sed
для преобразования пробелов в новые строки, а затем tail
для печати только последней строки.
$ SayStuff | sed 's/ /\n/g' | tail -n 1
cucumbers
grep и регулярные выражения, с помощью -o
которых печатается только совпадающая строка.
$ SayStuff | grep -Po '\w+$'
cucumbers
мошенничество
$ SayStuff | grep -o cucumbers
cucumbers
cut
не будет обрабатывать переменное количество пробелов, аawk
делать.