일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 컴퓨터과학
- 딥러닝
- 프로그래밍언어
- 네트워크
- 데이터베이스
- 빅데이터
- 알고리즘
- 컴퓨터비전
- I'm Sorry
- 보안
- 파이썬
- Yes
- 자바스크립트
- 버전관리
- 머신러닝
- 데이터과학
- 웹개발
- 데이터구조
- 데이터분석
- 2
- 사이버보안
- 클라우드컴퓨팅
- 소프트웨어공학
- 인공지능
- 코딩
- 자료구조
- 컴퓨터공학
- 네트워크보안
- 프로그래밍
- 소프트웨어
- Today
- Total
스택큐힙리스트
배시에서 구분자를 기준으로 문자열을 나누는 방법은 무엇인가요? 본문
저는 이 문자열을 변수에 저장하고 있습니다.
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 변수를 사용하여 문자열을 나눌 수 있습니다. 필요에 따라 적절한 방법을 선택하여 사용하면 됩니다.