문자열을 구분 기호로 분할하고 N번째 요소를 가져옵니다.

문자열을 구분 기호로 분할하고 N번째 요소를 가져옵니다.

문자열이 있습니다.

one_two_three_four_five

위 문자열의 변수 Atwo과 변수 B값을 저장해야 합니다.four

ksh를 사용하고 있습니다.

답변1

필드 구분 기호로 cutwith를 사용 하고 원하는 필드를 가져옵니다._

A="$(cut -d'_' -f2 <<<'one_two_three_four_five')"
B="$(cut -d'_' -f4 <<<'one_two_three_four_five')"

echoHere 문자열 대신 파이프라인을 사용할 수도 있습니다 .

A="$(echo 'one_two_three_four_five' | cut -d'_' -f2)"
B="$(echo 'one_two_three_four_five' | cut -d'_' -f4)"

예:

$ s='one_two_three_four_five'

$ A="$(cut -d'_' -f2 <<<"$s")"
$ echo "$A"
two

$ B="$(cut -d'_' -f4 <<<"$s")"
$ echo "$B"
four

에 개행 문자가 포함되어 있으면 의 2 번째 /4 번째 필드 가 아니라 의 각 줄에 2 번째 /4 번째$s 필드 를 포함하는 여러 줄 문자열이 반환된다는 점에 유의하세요 .$s$s

답변2

답변 을 보고 싶었 awk으므로 다음과 같습니다.

A=$(awk -F_ '{print $2}' <<< 'one_two_three_four_five')
B=$(awk -F_ '{print $4}' <<< 'one_two_three_four_five')  

온라인으로 사용해 보세요!

답변3

POSIX sh 구성만 사용하면 다음을 사용할 수 있습니다.매개변수 대체 구성한 번에 하나의 구분 기호를 구문 분석합니다. 이 코드에서는 필요한 수의 필드가 있다고 가정합니다. 그렇지 않으면 마지막 필드가 반복됩니다.

string='one_two_three_four_five'
remainder="$string"
first="${remainder%%_*}"; remainder="${remainder#*_}"
second="${remainder%%_*}"; remainder="${remainder#*_}"
third="${remainder%%_*}"; remainder="${remainder#*_}"
fourth="${remainder%%_*}"; remainder="${remainder#*_}"

또는 다음과 같이 인용되지 않은 매개변수 대체를 사용할 수 있습니다.와일드카드 확장장애인 및IFS구분 문자로 설정(이것은 구분 기호가 공백이 아닌 단일 문자이거나 공백 시퀀스가 ​​구분 기호인 경우에만 작동합니다.)

string='one_two_three_four_five'
set -f; IFS='_'
set -- $string
second=$2; fourth=$4
set +f; unset IFS

이는 위치 매개변수를 방해합니다. 함수에서 이 작업을 수행하면 함수의 위치 매개변수만 영향을 받습니다.

개행 문자를 포함하지 않는 문자열에 대한 또 다른 접근 방식은 read내장을 사용하는 것입니다.

IFS=_ read -r first second third fourth trail <<'EOF'
one_two_three_four_five
EOF

답변4

zsh문자열(on _)을 배열로 분할할 수 있습니다 .

non_empty_elements=(${(s:_:)string})
all_elements=("${(@s:_:)string}")

그런 다음 배열 인덱스를 통해 각 요소에 액세스합니다.

print -r -- ${all_elements[4]}

(대부분 의 zsh다른 쉘과 비슷하지만 ksh/ 와는 다름 bash)배열 인덱스는 1부터 시작.

또는 하나의 확장에서 직접:

print -r -- "${${(@s:_:)string}[4]}"

$1또는 해당 요소에 대해 익명 함수를 사용하여 , $2... 에서 사용할 수 있습니다 .

(){print -r -- $4} "${(@s:_:)string}"

관련 정보