[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
remote1
과 remote2
에 대해 각각 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들을 sort
와 uniq
명령어를 통해 제거해주면 된다.
$ git branch -r | grep -v '\->' | while read x; do echo ${x##*/}; done | sort | uniq b1 b2 b3 main
Reference
- https://codechacha.com/ko/shell-script-substring/