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

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

기본적으로 예를 들어 문자열 구분 기호를 사용하여 문자열을 배열로 분할하고 싶습니다 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자신의 요소에 각 줄이 포함된 배열을 만듭니다.

관련 정보