스택큐힙리스트

배시에서 구분자를 기준으로 문자열을 나누는 방법은 무엇인가요? 본문

카테고리 없음

배시에서 구분자를 기준으로 문자열을 나누는 방법은 무엇인가요?

스택큐힙리스트 2023. 3. 17. 14:22
반응형

저는 이 문자열을 변수에 저장하고 있습니다.

IN=bla@some.com;john@home.com

이제 ; 구분자로 문자열을 분할하려고 합니다. 따라서 다음과 같은 결과를 얻게 됩니다:

ADDR1=bla@some.com

ADDR2=john@home.com

나는 필요로하지 않아 ADDR1 와 ADDR2 변수가 있어도 괜찮아. 만약 그것들이 배열의 요소라면 더 좋겠다.

아래 답변에서 제안을 받아 내가 원했던 것은 다음과 같다.

#!/usr/bin/env bash

IN=bla@some.com;john@home.com

mails=$(echo $IN | tr ; \n)

for addr in $mails

do

echo > [$addr]

done

번역하십시오

> [bla@some.com]

> [john@home.com]

$#&*$$&^$&를 $#&^@$@!$&로 설정하는 해결책이 있었습니다. 그 답변이 어떻게 되었는지는 확실하지 않습니다. $#&*$$&^$&를 기본값으로 복원하는 방법이 있을까요?

제목: IFS 해결책에 대한 응답, 이 방법을 시도했고 작동합니다, 기존 IFS를 유지하고 복원합니다.

IN=bla@some.com;john@home.com

OIFS=$IFS

IFS=';'

mails2=$IN

for x in $mails2

do

echo > [$x]

done

IFS=$OIFS

그게 얘기인데, 내가 시도해 볼 때

mails2=($IN)

반복문에서 출력할 때 괄호 없이 첫 번째 문자열만 얻었는데, $IN을(를) 괄호 없이 출력하면 작동합니다.

답변 1

당신은 internal field separator (IFS) 변수를 설정하고, 그 후 이 변수가 배열로 파싱되도록 할 수 있습니다. 이것이 명령어에서 발생하면, @#read 환경에 대한 단일 명령어의 환경으로만 IFS 에 대한 할당이 이루어집니다. 그 다음, 입력을 IFS 변수 값에 따라 배열로 파싱하여 반복할 수 있습니다.

이 예제는 ;로 구분된 항목 한 줄을 구문 분석하고 배열에 넣습니다.

IFS=';' read -ra ADDR <<< $IN

for i in ${ADDR[@]}; do

# process $i

done

이 다른 예는 입출력 구분자인 ;로 구분된 각 입력 줄마다 $IN 전체 내용을 처리하는 것입니다.

while IFS=';' read -ra ADDR; do

for i in ${ADDR[@]}; do

# process $i

done

done <<< $IN

답변 2

[한국어 번역]

Bash에서 구분자로 문자열을 나누는 방법은 무엇인가요?

Bash는 리눅스와 macOS에서 사용할 수 있는 유닉스 셸입니다. 다양한 문자열 관련 작업을 수행할 수 있습니다. 이 중에서도 문자열을 구분자로 나누는 작업은 매우 유용합니다. 이번 글에서는 Bash에서 문자열을 구분자로 나누는 방법에 대해서 알아보겠습니다.

먼저, 문자열에서 특정 문자열을 찾고 이를 기준으로 문자열을 나누는 경우에는 cut 명령어를 사용할 수 있습니다. cut 명령어는 각 줄의 특정 위치에 있는 문자열을 추출하는 데 사용됩니다. 예를 들어, : 를 구분자로 하는 문자열이 있다면 다음과 같이 cut 명령어를 사용하여 이 문자열을 나눌 수 있습니다.

```

$ echo apple:banana:cherry | cut -d: -f1

apple

$ echo apple:banana:cherry | cut -d: -f2

banana

$ echo apple:banana:cherry | cut -d: -f3

cherry

```

위 예시는 echo로 문자열을 출력하고, cut 명령어로 : 를 구분자로 하여 각각의 필드를 추출하고 있습니다. -d 옵션으로 구분자를 지정하며, -f 옵션으로 추출할 필드를 지정합니다. 이 경우에는 구분자 : 를 사용하므로, -d: 를 입력합니다.

cut 명령어를 사용하지 않고도 문자열을 나눌 수 있습니다. 이 경우에는 IFS(Internal Field Separator) 변수를 사용하여 구분자를 지정해야 합니다. 구분자를 설정한 후, read 명령어를 사용하여 문자열을 읽고 각 필드를 분리할 수 있습니다.

```

$ IFS=:

$ echo apple:banana:cherry | while read a b c; do echo $a; echo $b; echo $c; done

apple

banana

cherry

```

위 예시는 문자열 apple:banana:cherry를 : 를 구분자로 하여 a, b, c 변수에 분리하여 대입하고 있습니다. IFS 변수에 : 를 설정한 후, while 루프를 사용하여 read 명령어로 문자열을 변수에 저장하고 각 필드를 분리합니다.

이렇게 Bash에서 문자열을 구분자로 나누는 방법은 간단합니다. cut 명령어와 IFS 변수를 사용하여 문자열을 나눌 수 있습니다. 필요에 따라 적절한 방법을 선택하여 사용하면 됩니다.

반응형
Comments