回答:
おそらく@slhckで既に指定されているオプションの1つを使用しますが、これを行う方法がいくつかあります。
他の言語の場合と同様に、配列を使用します。
$ 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の文字列操作機能を使用します。詳細については、こちらを参照してください。
もっと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
したがって、3番目のフィールドが必要であり、スペース ''で区切られている場合は、
$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers
あなたがしたい場合LASTフィールドを、あなたは、おそらく使用する必要がありますAWK。
この場合、次のようになります。
$ echo "スイカとキュウリ" | awk '{print $ NF}'
きゅうり
ではawk
NF行のフィールド数がそうである$NF
行の最後のフィールドを意味します。
cut
、可変数のスペースは処理しないことに注意してawk
ください。