답변:
아마도 @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
cucumbersgrep 및 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}'
오이
에서는 awkNF는 선 필드의 개수가 너무 $NF행의 마지막 필드를 의미한다.
cut하면서, 공간의 변수 수를 처리하지awk않습니다.