shell script 작성시 sed로 뭔가 치환하려고 하는데 경로명 같이 / 가 들어가서 에러가 발생하는 경우가 있음.
#!/bin/sh
STR='CURRENT_DIR = CWD'
REPLACE=$(pwd)
echo $STR | sed -e "s/CWD/$REPLACE/g"
# CURRENT_DIR = 현재경로를 표시하고 싶으나 에러 발생
# sed: -e expression #1, char 9: unknown option to `s'
문제가 / 일 경우 delimiter를 / 대신 다른 걸 사용하는 방법이 제일 간편함.
#!/bin/sh
STR='CURRENT_DIR = CWD'
REPLACE=$(pwd)
# delimiter를 / 대신 # 사용
# # 외에도 ! | @ _ 공백 , . ; : ? ~ 등 다양한 문자를 delimiter로 사용할 수 있음
# _ 의 경우 이번 예처럼 변수일 경우 변수로 인식되는 문제가 있으므로 그게 아닐 경우에만 사용할 것
echo $STR | sed -e "s#CWD#$REPLACE#g"
굳이 escape를 하고 싶다면 아래처럼 치환패턴 문자열에서 걸릴 것 같은 문자들을 escape 처리해주면 됨.
#!/bin/sh
STR='CURRENT_DIR = CWD'
REPLACE=$(pwd)
ESCAPED_REPLACE=$(printf '%s\n' "$REPLACE" | sed -e 's/[\/.*?&)(}{[&]/\\&/g')
echo $STR | sed -e "s/CWD/$ESCAPED_REPLACE/g"
.
'Linux' 카테고리의 다른 글
[Linux] ssh나 다른 데몬에서 sudo -u 를 이용해 다른 유저권한으로 실행시 sudo: sorry, you must have a tty to run sudo 오류 해결 (0) | 2020.11.16 |
---|---|
[Linux] shell script 파일 주석을 그대로 도움말로 사용하기 (0) | 2020.07.08 |
[Linux] 파일명 일괄변경 (0) | 2020.05.27 |
[Linux] 파일 2개의 합집합/교집합/차집합 찾기 (0) | 2020.05.25 |
[Linux] 콘솔에서 공인 IP 알아내는 가장 간단한 방법 (0) | 2020.05.21 |