-
반응형
bash 쉘 스크립트를 작성하다보면 string에 대해서 자주 다루게 될 것이다. 예를 들어 파일 리스트를 읽어서 확장자를 확인하거나 일부 문자열을 변경 해야 하는 일이다. 기본적으로 몇 가지만 숙지하고 있으면 스크립트 작성에 비용을 줄일 수 있다.
Extract a substring
$ MYVAR=morenice.kr
$ echo ${MYVAR##*e}
.kr
$ echo ${MYVAR%%.*}
morenice
변수명 뒤에 ## 이후의 string 매칭을 해서 추출한다. 변수에 저장된 string의 맨 앞에서부터 매칭해서 찾는 방식으로 # 하나만 쓰면 첫번째 찾은부분부터 자르고, # 두개를 사용하게되면 제일 마지막에 찾은 부분부터 추출한다. 변수에 저장된 string의 맨 앞에서부터 찾기 때문에 '*'은 맨 앞에 사용해야 유효하다.
$ echo ${MYVAR##*mo}
renice.kr
$ echo ${MYVAR##*more}
nice.kr
변수명 뒤에 %% 이후의 string 매칭을 해서 추출한다. 변수에 저장된 string의 맨 뒤에서부터 매칭해서 찾는 방식으로 % 하나를 쓰면, 맨뒤에서 첫번째 찾은 것을 위미하고, %%는 맨뒤에서 제일 마지막에 찾은 부분에서부터 추출한다. 변수에 저장된 string의 맨 뒤에서부터 찾기 때문에 '*'은 맨 뒤에 사용해야 유효하다.
$ echo ${MYVAR%%e*}
mor
$ echo ${MYVAR%e*}
morenic
$ echo ${MYVAR%%.kr}moreniceexample)#! /bin/bash if [ "${1##*.}" = "tar" ] then echo "tar files" else echo "no tar files" fi
$ ./is_tar.sh aaa.tartar files$ ./is_tar.sh aaa.tar123no tar filesindex를 통해서 부분적으로 변수내의 string을 추출할수도 있다.echo ${MYVAR:0:3}morString Length
변수명앞에 #을 붙여준다.
$ var1=aaaa
$ echo ${#var1}
4
String replace
변수에서 주어진 패턴을 찾아서 첫번째 찾은 string에 대해서 변경한다.
${변수/Pattern/Replacement}
변수에서 주어진 패턴을 찾아서 찾은 모든 string을 변경한다.
${변수//Pattern/Replacement}
변경된 내용은 원본인 변수에 다시 저장되지 않는다. 위의 내용을 새로운 변수에 넣어야 한다.
NEW_VAR=${변수//Pattern/Replacement}
반응형