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
cucumbersPerl,当然有很多方法可以做到这一点:
$ 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
cucumbersgrep和正则表达式,使用 -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}'
黄瓜
在awkNF中,是行中的字段数,因此$NF表示行中的最后一个字段。
cut不会处理可变数量的空格awk。