Linux,Unix,BSD

[linux] Bash에서 문자열 자르기 (substring, split)

채윤아빠 2021. 6. 2. 10:42

개요

Bash에서 문자열을 조작하는 기술은 쉘 스크립트를 작성할 때 매우 유용하게 활용됩니다.

이번 글에서는 Bash에서 문자열 자르기와 관련된 네 가지 주요 방법을 자세히 설명합니다:

  1. 특정 범위의 문자열 자르기 (Substring)
  2. cut 명령어로 문자열 자르기
  3. 패턴으로 문자열 자르기 (Parameter Expansion)
  4. 특정 문자로 문자열 분리하기 (IFS, read, awk 등)

1. 특정 범위의 문자열 자르기 (Substring)

Bash에서는 문자열의 일부만 추출할 수 있습니다. 다음은 ${string:position:length} 문법을 이용한 방법입니다.

str="HelloBashWorld"
echo ${str:0:5}     # Hello
echo ${str:5}       # BashWorld (5번째부터 끝까지)
echo ${str:5:4}     # Bash
  • ${str:pos} : pos부터 끝까지 잘라냄
  • ${str:pos:len} : pos부터 len 길이만큼 잘라냄
  • 음수 인덱스는 지원되지 않음 (Bash 4.2 이상에서는 ${str: -5} 와 같이 사용할 수 있음)

2. cut 명령어로 문자열 자르기

파일이나 입력 스트림에서 특정 위치의 문자열을 자를 때는 cut 명령어가 유용합니다.

echo "apple,banana,grape" | cut -d',' -f2
# 출력: banana


옵션 설명:

  • -d : 구분자(delimiter) 지정
  • -f : 필드 번호 지정

문자 단위로 자르려면 -c 옵션을 사용합니다.

echo "HelloWorld" | cut -c1-5
# 출력: Hello

3. 패턴으로 특정 문자열 자르기 (Parameter Expansion)

Bash에서는 특정 문자열 패턴을 기준으로 문자열을 자를 수 있습니다.

str="filename.txt"
echo ${str%.txt}    # filename (오른쪽 .txt 제거)
echo ${str#*.}      # txt (. 앞까지 제거)
  • ${var#pattern} : 앞에서 가장 짧은 패턴 제거
  • ${var##pattern} : 앞에서 가장 긴 패턴 제거
  • ${var%pattern} : 뒤에서 가장 짧은 패턴 제거
  • ${var%%pattern} : 뒤에서 가장 긴 패턴 제거

이 기법은 파일명, 경로, 확장자 등을 추출할 때 매우 유용합니다.


4. 특정 문자로 문자열 분리하기 (Split)

쉘에서 문자열을 특정 문자 기준으로 나누는 가장 간단한 방법은 IFSread를 활용하는 것입니다.

str="red:green:blue"
IFS=':' read -r a b c <<< "$str"
echo $a   # red
echo $b   # green
echo $c   # blue

배열로 분리하기

str="dog,cat,rabbit"
IFS=',' read -ra animals <<< "$str"
for animal in "${animals[@]}"; do
  echo "$animal"
done


또는 awk와 같은 도구를 사용할 수도 있습니다.

echo "key=value" | awk -F'=' '{print $1}'   # key
echo "key=value" | awk -F'=' '{print $2}'   # value

맺음말

Bash에서 문자열을 다루는 방법은 다양하며, 상황에 맞는 도구를 선택하면 효율적인 스크립트를 작성할 수 있습니다. 위에서 소개한 방법들을 적절히 조합하면 텍스트 데이터 처리에 큰 도움이 될 것입니다.

끝까지 읽어 주셔서 감사합니다!


728x90
반응형