Answers:
我可能会使用@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
这里是一些更多的解释:
Usage: cut OPTION... [FILE]...
Print selected parts of lines from each FILE to standard output.
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
-f, --fields=LIST
select only these fields; also print any line that contains no
delimiter character, unless the -s option is specified
因此,如果您需要第三个字段,并且用空格''分隔,则为
$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers
如果需要LAST字段,则可能应使用awk。
在这种情况下,它将变为:
$ echo“西瓜和黄瓜” | awk'{print $ NF}'
黄瓜
在awk
NF中,是行中的字段数,因此$NF
表示行中的最后一个字段。
cut
不会处理可变数量的空格awk
。