Linux,Unix,BSD

[shell] 문자열 잘라내기(substring)

채윤아빠 2022. 6. 13. 14:16
728x90
반응형

개요

쉘 스크립트 작업시 문자열을 잘라내는 방법을 정리해 둡니다.

범위(옵셋 및 길이) 지정 방법

문자열에 대한 범위(옵셋 및 길이)를 지정하는 방법은 다음과 같습니다.

$<변수명>:옵셋:길이

길이가 생략되면 문자열의 끝까지 반환됩니다.

다음과 같이 범위를 지정하여 손쉽게 문자열을 잘라낼 수 있습니다.

pi@raspberrypi:~ $ STRING="test string"
pi@raspberrypi:~ $ echo "${STRING: 0:4}"
test
pi@raspberrypi:~ $ echo "${STRING: 5}"
string

뒤에서부터 문자열을 잘라낼 때는 옵셋에 음수값을 입력하면 됩니다.

pi@raspberrypi:~ $ echo "${STRING: -8:3}"
t s
pi@raspberrypi:~ $ echo "${STRING:(-8):3}"
t s
pi@raspberrypi:~ $ echo "${STRING: -5}"
tring

cut 명령 이용

"cut" 명령을 이용하면 보다 다양한 방법으로 문자열을 다룰 수 있습니다만, 본 글에서는 범위를 지정하여 잘라내는 방법에 대해서만 우선 살펴보고, "cut" 명령에 대한 상세한 내용은 다음에 정리해 보겠습니다.

기본적으로 "cut" 명령을 이용하여 범위를 지정하여 문자열을 잘라낼 때는 다음과 같은 형식을 이용합니다.

cut -c<시작옵셋>-<끝옵셋>

앞서 스크립트 변수의 범위 지정과는 다르게 "cut" 명령에서 끝옵셋을 지정하지 않으면, 무조건 1개만 반영되도록 끝옵셋값이 자동으로 설정됩니다.
그리고, 옵셋의 시작위치도 0이 아닌 1부터 시작된다는 점에 유의하셔야 합니다.

다음과 같이 범위를 지정하여 문자열을 잘라낼 수 있습니다.

pi@raspberrypi:~ $ STRING="test string"
pi@raspberrypi:~ $ echo "${STRING}"cut -c1-4
test

다음과 같이 끝 옵셋을 지정하지 않은 경우 1글자만 출력됩니다.

pi@raspberrypi:~ $ echo "${STRING}"cut -c6
s

"cut" 명령은 문자열의 뒷 부분부터 잘라 낼수 가 없습니다. 음수가 아닌 범위로 인식하여 시작옵셋을 지정하지 않은 것으로 판단하고, 자동으로 처음부터 끝옵셋까지의 문자열을 출력합니다.

pi@raspberrypi:~ $ echo "${STRING}"cut -c-4
test

하지만, 다음과 같이 범위 및 특정 위치의 문자들을 조합하는 것도 가능합니다.

pi@raspberrypi:~ $ echo "${STRING}"cut -c-4,8,9
testri

1~4 문자열 + 8번째 문자 + 9번째 문자의 결과가 출력됩니다.


참고자료