답변:
아마도 @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
펄, 물론이 작업을 수행하는 방법은 여러 가지가 있습니다.
$ 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
인수 로 전달합니다. 펄은 @ARG
배열에 저장할 것이므로의 마지막 요소를 인쇄합니다 @ARG
.
속임수. 이것은 sed
공백을 개행 문자로 변환 한 다음 tail
마지막 행만 인쇄하는 데 사용됩니다.
$ SayStuff | sed 's/ /\n/g' | tail -n 1
cucumbers
grep 및 regular expression -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
않습니다.