Linux,  Programming

[Linux] Bash Shell 특정 패턴 문자 제외

Linux에서 pipe (|) 연산자를 통해 stdout으로 출력된 문자열들을 처리하는 업무들을 자주한다. 만약 stdout으로 출력된 여러줄의 문자열 각각에 대해 특정 조건에 해당되는 부분을 제외하고 출력하고 싶을 때 다음 표현식을 통해 해결 가능하다.

${STRING##PATTERN}

Example

예를 들면, git의 연결된 모든 remote들의 branch들을 parsing하고 싶을 때 활용 할 수 있다.

$ git branch -r
  remote1/b1
  remote1/b2
  remote1/main
  remote2/HEAD -> remote2/main
  remote2/b1
  remote2/b2
  remote2/b3
  remote2/main

remote1remote2에 대해 각각 branch를 가지고 있을 때, unique branch 명을 얻기 위해서 다음과 같이 커맨드를 수행하면 된다.

$ git branch -r | grep -v '\->'
  remote1/b1
  remote1/b2
  remote1/main
  remote2/b1
  remote2/b2
  remote2/b3
  remote2/main
$ git branch -r | grep -v '\->' | while read x; do echo ${x#*/}; done
b1
b2
main
b1
b2
b3
main

그리고 중복된 branch들을 sortuniq 명령어를 통해 제거해주면 된다.

$ git branch -r | grep -v '\->' | while read x; do echo ${x##*/}; done | sort | uniq
b1
b2
b3
main

Reference

  1. https://codechacha.com/ko/shell-script-substring/

Leave a Reply

Your email address will not be published. Required fields are marked *