리눅스나 맥 등에서 개발이나 배포 과정을 자동화하기 위해 셸 스크립트를 이용하는 경우가 많다. 특히 보안 키 등 설정 파일에서 공개 저장소에 배포하기 꺼려지는 부분들은 비워놓고 실제 배포 등에서만 치환되게 하고자 하는 경우가 종종 있다.
이럴 때 쉽게 쓸 수 있는 방법은 오래(?) 되었지만 잘 작동하는 친구인 sed를 활용할 수 있다. 사용하는 패턴 방식도 Vim이나 Perl의 것과 비슷하기에 쉽게 쓸 수 있다.
예를 들어 특정 INPUTFILE의 내용을 읽어서 OLD라는 문자를 NEW로 치환해서 OUTPUTFILE로 저장하고 싶다면 아래와 같이 입력할 수 있다.
sed "s/OLD/NEW/g" INPUTFILE > OUTPUTFILE
sed의 매개변수로 전달된 패턴 표현식은 Vim이나 Perl에서 사용하는 정규표현식(Regular Expression)과 굉장히 유사하다. 따라서 해당 정규표현식 패턴만 더 찾아보면 자유자재로 이용할 수 있을 것 같다.
참고로 오른쪽 방향 꺽쇠(>
)는 아는 사람은 알겠지만 sed의 표준 출력(stdout)을 파일로 저장하기 위한 명령이다. 더 쉽게 말하자면 터미널 화면에 표시되는 내용을 그대로 파일에 저장한다는 말이다. 이 부분을 파일이 아닌 다른 파이프로 던져줘서 자유자재로 사용할 수 있는 점은 유닉스 유틸리티 다운 부분이다.
cat INPUTFILE | \
sed "s/OLD/NEW/g" | \
less
위와 같은 식으로 작성하면 INPUTFILE의 내용을 읽어서 텍스트 치환을 거치고 해당 내용을 less로 볼 수 있다. 물론 굳이 cat을 이용할 필요는 없었지만 그저 파이프로도 동작한다는 것을 보여주고 싶었을 뿐이다.
좀 더 실제로 동작하는 예제는 아래가 있을 것 같다. 별도의 파일도 필요 없고 바로 실행시켜 볼 수 있다.
echo 'email = "ENTER YOUR EMAIL"' | \
sed "s/ENTER YOUR EMAIL/theuser@foo.bar/g"
이렇게 하면 화면에 아래와 같은 내용이 출력된다.
email = "theuser@foo.bar"
이런 식으로 원하는 부분을 치환해서 보안에 민감한 코드를 저장소에 올리지 않기에 도움이 될 수 있을 것 같다. 개인적으로는 자동화 셸 스크립트에서 종종 사용하게 될 것 같다.
'기술적인 이야기 > 터미널 및 셸' 카테고리의 다른 글
셸 프롬프트를 간결하게 바꿨다 (0) | 2024.02.10 |
---|---|
셸 스크립트에서 인자 입력 처리하기 (2) | 2023.12.07 |
macOS 터미널에서 QR코드 생성하기 (3) | 2023.11.11 |
중복 파일 검색기 rdfind (0) | 2023.08.24 |
imagemagick으로 사진 연결하기 (2) | 2023.05.20 |
댓글