Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

Bash/Shell 스크립트에서 문자열 분할하는 방법 – 예제로 쉽게 배우기

이 글에서는 Bash/Shell 스크립트에서 지정한 구분자를 기준으로 문자열을 분할하는 방법을 예제와 함께 소개합니다.

문자열 분할은 스크립트를 작성할 때 매우 유용하게 쓰이는 기능입니다. CSV(Comma Separated Values, 쉼표로 구분된 값)는 온라인에서 데이터를 제공할 때 흔히 사용되는 형식으로, 표의 각 데이터 필드가 쉼표로 구분되어 있습니다.

또한 문장을 공백을 기준으로 단어별로 나누거나, 문단을 마침표를 기준으로 문장 단위로 분리하는 등 다양한 용도로 활용할 수 있습니다.

많은 해결 방법이 Bash 전용 기능에 의존하고 있습니다. 아래에서 소개하는 방법은 어떤 리눅스 셸 스크립트에서도 동작하므로 더욱 범용적으로 사용할 수 있습니다.

cut 명령어로 문자열 분할하기

리눅스의 cut 명령어는 텍스트 파일의 각 줄에서 특정 부분을 잘라내어 출력하는 도구입니다.

이 예제에서는 이 명령어를 응용해 지정한 구분자를 기준으로 문자열을 분할해 보겠습니다.

cut 명령어의 전체 사용 설명서가 필요하다면 관련 문서를 참고하세요.

코드 예제

아래는 splitMe 문자열을 쉼표(,)로 분할한 뒤, 원하는 위치의 항목을 반환하는 Bash 스크립트 예제입니다:

#!/bin/bash

# 쉼표로 구분된 문자열 정의
splitMe='apple,banana,grape,kiwi'

# 분할된 문자열에서 첫 번째 항목 가져오기
firstItem="$(echo $splitMe | cut -d',' -f1)"

# 분할된 문자열에서 세 번째 항목 가져오기
thirdItem="$(echo $splitMe | cut -d',' -f3)"

# 결과를 화면에 출력하여 확인
echo $thirdItem

이 코드가 동작하는 원리는 다음과 같습니다. 먼저 echo 명령어로 원본 문자열을 파이프(|)를 통해 cut 명령어에 전달합니다. 그러면 cut 명령어가 -d 옵션으로 구분자를 지정하고(여기서는 쉼표를 사용했지만, 임의의 문자나 문자열도 사용 가능합니다), -f 옵션 뒤에 숫자를 붙여 반환할 필드의 위치를 지정합니다. 즉, 분할된 문자열에서 가져오고 싶은 항목의 순번을 의미합니다.

재사용 가능한 Bash 함수

위 방법도 잘 동작하지만, 필요할 때마다 코드를 반복해서 작성해야 하는 불편함이 있습니다. 함수로 만들어 두면 어디서든 손쉽게 재사용할 수 있습니다:

#!/bin/bash

# 문자열 분할 함수 정의
# 세 개의 매개변수를 받습니다: 분할할 문자열, 구분자, 반환할 항목의 위치
splitMyString(){
    splitString=$1
    delimiter=$2
    item=$3
    result="$(echo $splitString | cut -d"$delimiter" -f$item)"
    echo $result
}

# 테스트용 문자열 정의
splitMe='apple,banana,grape,kiwi'

# 쉼표를 기준으로 문자열을 분할하고 두 번째 항목을 반환하여 함수 테스트
echo $(splitMyString "$splitMe" "," 2)

이 함수는 첫 번째 매개변수로 분할할 문자열을, 두 번째 매개변수로 구분자를, 세 번째 매개변수로 반환할 항목의 위치를 받습니다. 참고로 위 예제에서는 구분자를 변수로 처리하도록 개선하여, 쉼표 외에 공백이나 세미콜론 등 어떤 구분자든 자유롭게 사용할 수 있습니다. 이처럼 함수로 묶어 두면 여러 스크립트에서 일관되게 문자열 분할 로직을 활용할 수 있어 코드의 가독성과 유지보수성이 크게 향상됩니다.