$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers
-d ' ' říká cut rozdělit na prostory. -f 3 vybere třetí sloupec.
Můžete také použít awk , který již provádí rozdělení na základě prostoru a zpřístupňuje sloupce jako $1 , $2 , …
$ echo "Watermelons and cucumbers" | awk '{ print $3 }'
cucumbers
Pravděpodobně bych použil jednu z možností již poskytnutých @slhck, ale zde je několik dalších způsobů, jak to udělat:
-
Použití polí jako v jakémkoli jiném jazyce:
$ foo=( $(SayStuff) ) $ echo ${foo[2]} cucumbersvar=()deklaruje pole,$(command)uloží výstup příkazu. Takžefoo=( $(SayStuff) )ukládá výstupSayStuffdo polefooa vy pakechoje to třetí prvek s${foo[2]}. -
sed$ SayStuff | sed 's/.* \(.*\)/\1/' cucumberssedpříkaz nahradí (s///) vše s posledním slovem. Regulární výraz odpovídá čemukoli až do mezery (.*), který bude odpovídat všemu až do poslední mezery a poté zachytí poslední slovo(\(.*\). Protože slovo bylo zachyceno, můžeme jej označit jako\1.Jednodušší verze:
$ SayStuff | sed 's/.* //' cucumbers -
bash
$ foo=$(SayStuff); echo ${foo##* } cucumbersTo využívá schopnosti manipulace se řetězci bash, další podrobnosti naleznete zde.
-
Více bash
$ SayStuff | while read a b c; do echo $c; done cucumbers -
Perl, kde samozřejmě existuje mnoho způsobů, jak to udělat:
$ SayStuff | perl -lane 'print $F[$#F]' cucumber-aděláperlchovat se jakoawk, rozdělení řádků na prázdné místo a uložení do pole@F. Potom vytiskneme poslední prvek@F($#Fje počet prvků v@F).-lřekne perlu, aby ke každémuprintpřidal nový řádek-nže by měl zpracovat STDIN řádek po řádku a-eže by měl spustit skript uvedený na příkazovém řádku.$ SayStuff | perl -pe 's/.* //' cucumberMožnosti byly vysvětleny výše, pouze mažeme vše do posledního místa a tiskneme (
-p).$ perl -le 'print $ARGV[$#ARGV]' $(SayStuff) cucumbersZde předáváme
Watermelons and cucumbersjako argumenty, které perl uloží do@ARGpole a tak vytiskneme poslední prvek@ARG. -
podvod. Tento používá
sedpro převod mezer na nové řádky a potétailvytisknout pouze poslední řádek.$ SayStuff | sed 's/ /\n/g' | tail -n 1 cucumbers -
grep a regulární výrazy pomocí
-okterý vytiskne pouze odpovídající řetězec.$ SayStuff | grep -Po '\w+$' cucumbers -
podvádění
$ SayStuff | grep -o cucumbers cucumbers
Zde je další vysvětlení:
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
Pokud tedy potřebujete 3. pole a je odděleno mezerami ' ', pak je
$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers
Pokud chcete POSLEDNÍ pravděpodobně byste měli použít awk .
V tomto případě to bude:
$ echo "Melouny a okurky" | awk '{ print $NF }'
okurky
V awk NF je počet polí v řádku, takže $NF znamená poslední pole v řádku.