Можливо, я б скористався одним із варіантів, які вже надав @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
.