본문 바로가기
Linux/Bash

[Bash] 문자열 자르는 방법

by A6K 2022. 12. 3.

Bash 스크립트로 문자열 데이터를 다룰 때, 문자열의 일부를 잘라서 사용해야하는 경우도 있다. 문자열을 자르는 방법에 대해서 알아보자.

문자열 자르기 - 인덱스로 자르기

Bash 스크립트에서 문자열의 일부를 잘라서 사용해야 하는 경우 다음과 같은 문법을 사용하면 된다.

${str:offset:length}

str 변수에 담겨있는 문자열의 offset 부터 length 만큼 잘라오겠다는 의미다. 예를 들어

#!/bin/bash

str="Hello, World"

echo "${str:0:5}"
echo "${str:7:5}"

Hello, World 라는 문자열을 담고 있는 str 변수를 ${str:0:5}로 접근하면 0번 문자부터 5개의 문자를 잘라서 가져온다. 즉 Hello 문자열이 얻어진다. 마찬가지로 ${str:7:5}는 7번 문자부터 5개를 가져와 World 문자열이 얻어진다.

위 코드의 실행결과는 다음과 같다. 

$ ./test.sh
Hello
World

만약 length 부분을 생략하면 offset 부터 문자열의 끝까지 가져온다.

#!/bin/bash

str1="Hello, World"

echo "${str1:7}"

실행결과는 다음과 같다.

$ ./test.sh
 World

7번 문자부터 끝까지 가져와 " World" 문자열을 얻어왔다.

문자열의 Offset은 음수로 사용할 수도 있다. 음수로 사용한 경우 뒤에서부터 몇 번째 문자인지를 의미한다. 즉, -5는 뒤에서 5번째 문자의 위치를 의미한다.

#!/bin/bash

str1="Hello, World"

echo "${str1:7}"

실행결과는 다음과 같다.

$ ./test.sh
World

마찬가지로 음수의 offset을 사용할 때에도 length 값을 사용하거나 생략할 수 있다.

문자열 자르기 - cut 명령어로 자르기

cut 명령으로 문자열을 자르는 방법도 있다.

#!/bin/bash

str1="Hello, World"
echo $str1 | cut -c 8
echo $str1 | cut -c 1,8

실행결과는 다음과 같다.

$ ./test.sh
W
HW

cut 명령은 입력받은 문자열을 잘라주는 역할을 한다. 입력받은 문자열에서 -c 옵션으로 받은 숫자에 해당하는 문자를 돌려준다. cut -c 8 은 8번째 문자를 리턴하고, cut -c 1,8 은 첫 번째와 8번째 문자를 리턴한다.

cut 명령의 -c 옵션은 문자의 범위를 받기도 한다.

#!/bin/bash

str1="Hello, World"
echo $str1 | cut -c 5-8

실행결과는 다음과 같다.

$ ./test.sh
o, W

5번째 문자부터 8번째 문자까지를 출력한다. 

범위를 지정할 때 숫자를 지정하지 않으면 문자열의 처음 혹은 끝까지라는 의미로 사용된다.

#!/bin/bash

str1="Hello, World"

echo $str1 | cut -c -5
echo $str1 | cut -c 8-

실행결과는 다음과 같다.

$ ./test.sh
Hello
World

문자열 자르기 - 구분 문자를 기준으로 자르기

문자열을 특정 구분문자(Delimiter)를 기준으로 자를 수 있다.

#!/bin/bash

str1="Hello, World"

echo $str1 | cut -d "," -f1
echo $str1 | cut -d "," -f2

실행결과는 다음과 같다.

#!/bin/bash

str1="Hello, World"

echo $str1 | cut -d "," -f1
echo $str1 | cut -d "," -f2

, 문자를 기준으로 두개의 문자열이 얻어졌다. -f 옵션으로 얻어진 문자열 중 몇 번째를 가져 올 것인지 지정할 수 있다.

댓글