문자열(다중 문자) 구분 기호를 사용하여 문자열을 배열로 분할하는 방법은 무엇입니까?

문자열(다중 문자) 구분 기호를 사용하여 문자열을 배열로 분할하는 방법은 무엇입니까?

기본적으로 문자열을 문자열 구분 기호(예 sep.: . bash와 같은 도구를 사용하지 않고 이 작업을 수행할 수 있는 기본 방법이 있습니까 ? 설정 및 사용을 통해 문자열을 배열로 분할할 수 있다는 것을 알고 있지만 문자열 구분 기호로는 작동하지 않습니다. 그렇지 않다면 이 작업을 수행하기 위해 , 등과 같은 도구를 어떻게 사용하겠습니까?sedawkIFSread -rasedawk

문자열이 있고 이를 와 This is some sep.string2개의 요소가 있는 배열로 분할하고 싶다고 가정해 보겠습니다 .This is somestring

답변1

매개변수 확장을 사용하여 수동으로 변수를 반복할 수 있습니다.

#!/bin/bash
var='This is some sep.string
with
newlines
sep.another line'

a=()
while [[ $var =~ sep\. ]]
do
  e=${var%%sep.*}
  a+=("${e}")
  var=${var#${e}sep.}
done
a+=("${var}")

이는 변수를 반복하여(프로세스에서 업데이트) 첫 번째 구분 기호를 앞쪽으로 제거합니다( %%가장 긴 일치 항목을 찾으므로 문자열 끝에서 첫 번째 인스턴스까지 역방향으로 추적됩니다 sep.). 나머지는 다음에 추가됩니다. 배열의 나머지 부분과 구분 기호는 변수 앞 부분에서 제거됩니다. 변수에 더 이상 구분 기호가 없을 때까지 반복한 다음 나머지를 배열에 추가합니다.

답변2

매개변수 확장 및 readarray를 사용하여 이를 수행하는 기본 방법과 비슷합니다.

string='This is some sep.string'
mapfile -t array < <( echo "${string//sep./$'\n'}" )

${string//sep./$'\n'}sep.- 발생을 개행 문자로 바꿉니다. mapfile/는 readarray각 행에 자체 요소가 있는 배열을 만듭니다.

관련 정보