리눅스의 Bash shell에서 문자열을 자르는 방법을 소개합니다.
1. 특정 범위의 문자열 자르기
다음과 같은 Syntax로 특정 Index 범위의 문자열을 자를 수 있습니다. offset
은 문자열이 시작하는 index
를 입력하며, length에는 offset부터 자르고 싶은 길이를 입력합니다.
echo "${STR:offset:length}"
다음 코드는 Index 0에서 5개의 문자까지 잘라서 str
변수에 저장합니다.
#!/bin/bash
str="Hello, World, Bash!"
echo "${str:0:5}"
Output:
$ bash example.sh
Hello
1.1 특정 범위의 문자열 자르기 (2)
다음과 같이 length를 입력하지 않으면 offset부터 문자열 끝까지 자릅니다.
#!/bin/bash
str="Hello, World, Bash!"
echo "${str:7}"
Output:
$ bash example.sh
World, Bash!
1.2 문자열 뒤에서 자르기
다음과 같이 offset을 음수로 설정하면 문자열 뒤에서 offset을 계산합니다. str변수에서 offset -5
는 B
의 위치가 됩니다. 그리고 length를 입력하지 않았기 때문에 문자열 끝까지 자릅니다.
#!/bin/bash
str="Hello, World, Bash!"
echo "${str:(-5)}"
Output:
$ bash example.sh
Bash!
length를 입력하면 offset에서 입력한 길이만큼 문자열을 자릅니다.
#!/bin/bash
str="Hello, World, Bash!"
echo "${str:(-5):2}"
Output:
$ bash example.sh
Bash!
2. cut 명령어로 문자열 자르기
2.1 문자 1개 추출
cut -c 8
는 문자열에서 8번째 문자를 자릅니다.
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8
Output:
$ bash example.sh
W
만약 cut -c 8,12
처럼 입력하면, 8번째와 12번째의 문자가 추출됩니다.
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8,12
Output:
$ bash example.sh
Wd
2.2 특정 범위의 문자열 자르기
cut으로 설정한 범위의 문자열을 추출할 수 있습니다. cut -c Start-End
처럼 자르고 싶은 문자열 범위를 지정할 수 있습니다. 주의할 것은 문자열의 Offset은 1부터 시작합니다.
다음 예제에서 cut -c 8-12
는 8번째에서 12번까지의 문자열을 자릅니다.
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8-12
Output:
$ bash example.sh
World
2.3 범위 지정 시, 문자열 끝 범위 생략
다음과 같이 문자열 끝 범위를 지정하지 않으면, 문자열 끝까지 자릅니다.
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8-
Output:
$ bash example.sh
World, Bash!
2.4 범위 지정 시, 문자열 시작 범위 생략
다음과 같이 문자열 시작 범위를 지정하지 않으면, 문자열 첫번째부터 끝 범위까지 자릅니다.
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c -5
Output:
$ bash example.sh
Hello
3. 패턴으로 특정 문자열 자르기
문자열에서 패턴을 찾고, 그 문자를 삭제할 수 있습니다. 문자열에 따라 짧게 일치하는 패턴이 있고, 길게 일치하는 패턴이 있는데, 명령어에 따라서 어떤 패턴을 삭제할지 결정할 수 있습니다.
3.1 첫번째 문자열 포함, 가장 짧게 매칭되는 문자열 삭제
${STR#PATTERN}
는 STR 변수의 문자열 중에, 첫번째 문자열을 포함하고, 패턴과 일치하는 문자열을 찾습니다. 그 중에 가장 짧게 일치하는 패턴을 삭제합니다.
아래 예제의 문자열에서 A*B
패턴을 찾으면, AAAB
가 가장 짧게 일치하는 패턴이고, AAABBB
가 가장 길게 일치하는 패턴입니다. 실행 결과를 보시면 가장 짧게 일치하는 문자열이 삭제됩니다.
#!/bin/bash
str="AAABBBCCC"
echo ${str#A*B}
Output:
$ bash example.sh
BBCCC
3.2 첫번째 문자열 포함, 가장 길게 매칭되는 문자열 삭제
${STR##PATTERN}
는 STR 변수의 문자열 중에, 첫번째 문자열을 포함하고 패턴과 일치하는 문자열을 찾습니다. 그 중에 가장 길게 일치하는 패턴을 삭제합니다.
아래 예제의 문자열에서 A*B
패턴을 찾으면, AAAB
가 가장 짧게 일치하는 패턴이고, AAABBB
가 가장 길게 일치하는 패턴입니다. 실행 결과를 보시면 가장 길게 매칭되는 문자열이 삭제됩니다.
#!/bin/bash
str="AAABBBCCC"
echo ${str##A*B}
Output:
$ bash example.sh
CCC
3.3 마지막 문자열 포함, 가장 짧게 매칭되는 문자열 삭제
${STR%PATTERN}
는 STR 변수의 문자열 중에, 마지막 문자열을 포함하고 패턴과 일치하는 문자열을 찾습니다. 그 중에 가장 짧게 일치하는 패턴을 삭제합니다.
아래 예제의 문자열에서 B*C
패턴을 찾으면, BCCC
가 가장 짧게 일치하는 패턴이고, BBBCCC
가 가장 길게 일치하는 패턴입니다. 실행 결과를 보시면 가장 짧게 매칭되는 문자열이 삭제됩니다.
#!/bin/bash
str="AAABBBCCC"
echo ${str%B*C}
Output:
$ bash example.sh
AAABB
3.4 마지막 문자열 포함, 가장 길게 매칭되는 문자열 삭제
${STR%%PATTERN}
는 STR 변수의 문자열 중에, 마지막 문자열을 포함하고 패턴과 일치하는 문자열을 찾습니다. 그 중에 가장 길게 일치하는 패턴을 삭제합니다.
아래 예제의 문자열에서 B*C
패턴을 찾으면, BCCC
가 가장 짧게 일치하는 패턴이고, BBBCCC
가 가장 길게 일치하는 패턴입니다. 실행 결과를 보시면 가장 길게 매칭되는 문자열이 삭제됩니다.
#!/bin/bash
str="AAABBBCCC"
echo ${str%%B*C}
Output:
$ bash example.sh
AAA
4. 특정 문자로 문자열 분리하기
cut 명령어를 사용할 때 구분자를 지정할 수 있고, 그 구분자를 기준으로 문자열을 분리할 수 있습니다.
cut -d ':' -f1
는 문자열에서 :
를 기준으로 문자열을 분리하고, 분리된 문자열들 중에 첫번째 문자열을 str
에 저장합니다. 만약 두번째로 분리된 문자열을 얻고 싶다면 -f2
로 지정하시면 됩니다.
#!/bin/bash
str="Hello:World:Bash"
echo $str | cut -d ':' -f1
echo $str | cut -d ':' -f2
echo $str | cut -d ':' -f3
Output:
$ bash example.sh
Hello
World
Bash
5. References
Related Posts
- Bash Shell - 문자열에서 마지막 문자 N개 제거
- Bash Shell - 문자열에서 첫번째 문자 N개 제거
- Bash Shell - 실행 시간 측정 방법
- Bash Shell - 나눗셈에서 버림, 올림, 반올림 처리
- Bash Shell - 숫자가 양수인지 음수인지 확인하는 방법
- Bash Shell - 자신의 스크립트 파일 이름 가져오기
- Bash Shell - 문자열 출력 방법(echo, printf)
- Bash Shell - seq 명령어로 반복문 구현 및 예제
- Bash Shell - File 테스트 연산자
- Bash Shell - 무한 루프 (Infinite loop)
- Bash Shell - 숫자 비교 연산자
- Bash Shell - 문자열 비교 연산자
- Bash Shell - 대문자, 소문자로 변환 (Uppercase, Lowercase)
- Bash Shell - 스트립트를 root로 실행했는지 확인
- Bash Shell - 명령어 실행 결과를 변수에 저장
- Bash Shell - select로 선택 메뉴 구현
- Bash Shell - 변수가 정의되었는지 확인하는 방법
- Bash Shell - sleep 함수, 특정 시간 멈추기
- Bash Shell - 파일이 존재하는지 확인
- Bash Shell - 문자열 자르기 (substring, split)
- Bash Shell - 날짜, 시간 가져오기
- Bash Shell - Case 조건문
- Bash Shell - 파일 읽는 방법
- Bash Shell - 사용자로부터 입력 받기
- Bash Shell - 문자열을 연결하는 방법
- Bash Shell - 파일 생성 및 문자열 추가
- Bash Shell - 숫자 변수 증가/감소 시키기
- Bash Shell - 배열 할당, 길이, 객체 포함 여부 확인
- Bash Shell - 문자열 비교, 문자열 포함 여부 확인
- Bash Shell - 변수 선언, 할당
- Bash Shell - 조건문(if-else)
- Bash Shell - 숫자 연산 (더하기, 빼기, 곱하기, 나누기)
- Bash Shell - 반복문(for, while, until loop)
- Bash Shell - Command Line으로 전달된 인자 받기
- Bash Shell - 함수(Function)