경고 : 이것은 개행을 고려 하지 않습니다 . 더 자세한 답변은 이 SO 질문을 참조하십시오 . (감사합니다, Ed Morton & Niklas Peter)
모든 것을 탈출하는 것은 나쁜 생각입니다. Sed는 특별한 의미 를 얻기 위해 많은 캐릭터를 탈출해야 합니다. 예를 들어, 대체 문자열에서 숫자를 이스케이프하면 역 참조로 바뀝니다.
Ben Blank가 말했듯이 대체 문자열에서 이스케이프해야 할 문자는 세 개뿐입니다 (이스케이프, 명령문 끝 및 슬래시 모두 슬래시).
ESCAPED_REPLACE=$(printf '%s\n' "$REPLACE" | sed -e 's/[\/&]/\\&/g')
# Now you can use ESCAPED_REPLACE in the original sed statement
sed "s/KEYWORD/$ESCAPED_REPLACE/g"
KEYWORD
문자열 을 이스케이프해야하는 경우 다음이 필요합니다.
sed -e 's/[]\/$*.^[]/\\&/g'
그리고 다음에 의해 사용될 수 있습니다 :
KEYWORD="The Keyword You Need";
ESCAPED_KEYWORD=$(printf '%s\n' "$KEYWORD" | sed -e 's/[]\/$*.^[]/\\&/g');
# Now you can use it inside the original sed statement to replace text
sed "s/$ESCAPED_KEYWORD/$ESCAPED_REPLACE/g"
/
분리 문자 이외의 문자를 사용하는 경우 사용중인 문자 와 함께 위의 표현식에서 슬래시를 바꿔야합니다. 설명은 PeterJCLaw의 의견을 참조하십시오.
편집 : 이전에 설명되지 않은 일부 경우로 인해 위의 명령이 여러 번 변경되었습니다. 자세한 내용은 편집 기록을 확인하십시오.