Shell: 문자열 바꾸기(Parameter Substitution)

인터넷에 차고 넘치는 문서 중, 익숙한 사이트에 있는 내용을 기반으로 글을 작성했다.

리눅스 CLI 에서 문자열을 바꾸려면? 먼저 sed 가 떠오른다. awk 도 있으나 전혀 쓰지 못하므로 넘기고, perl도 생각해볼 수 있다.

하지만, Shell(Bash, zsh) 자체에도 이른바 Expansion 이라는 이름으로 이 기능이 제공되고 있다.

사용법은 sed 와 거의 비슷한데, s 를 쓸 필요는 없다.

${varName/Pattern/Replacement} # 1회 매칭/대체
${varName//Pattern/Replacement} # 모두 매칭/대체

앞에 s 도 필요없고, 뒤에 g 도 필요없다.
그러나 이전 글에서 얘기했던 ‘/’ 문제는 여기서도 여전히 신경써야만 하는데, 불행하게도 구분자(Delimeter)를 바꿀 순 없다.
다만, Perl 처럼, 변수화하여 작업하면 아무런 오류없이 잘 작동한다.

➜ aa="나는/너를/정말/미워해" 
➜ pat='너를/'
➜ subs='걔를!\'
➜ echo "${aa/$pat/$subs}" 
나는/걔를!\정말/미워해

Pattern 에 Regex 가 되는지는 안해봤는데, 간단한 작업이라면 그냥 이 기능을 사용하는게 좋을 듯!

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.