ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • bash, string handling
    2013. 1. 2. comments
    반응형

    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}
    morenice
    example) 
      #! /bin/bash if [ "${1##*.}" = "tar" ] then   echo "tar files" else   echo "no tar files" fi
     
    $ ./is_tar.sh aaa.tar
    tar files
     
    $ ./is_tar.sh aaa.tar123
    no tar files
     
    index를 통해서 부분적으로 변수내의 string을 추출할수도 있다.
    echo ${MYVAR:0:3}
    mor

     

    String Length

    변수명앞에 #을 붙여준다.

    $ var1=aaaa

    $ echo ${#var1}

    4

     

     

    String replace

    변수에서 주어진 패턴을 찾아서 첫번째 찾은 string에 대해서 변경한다.

    ${변수/Pattern/Replacement}

    변수에서 주어진 패턴을 찾아서 찾은 모든 string을 변경한다.

    ${변수//Pattern/Replacement}

     

    변경된 내용은 원본인 변수에 다시 저장되지 않는다. 위의 내용을 새로운 변수에 넣어야 한다.

    NEW_VAR=${변수//Pattern/Replacement}

     

    반응형

    댓글

Designed by Tistory.