새 줄이 포함 된 문자열로 sed를 사용하는 파일에서 문자열을 바꾸는 데 문제가 있습니다. 다음은 완전히 실패합니다. 나는 replace_with 문자열을 벗어나야 만한다고 가정하지만, 어떻게 할 수 없으며, 이것이 최선의 방법 일지라도 해결할 수는 없습니다. 어떤 도움을 주시면 감사하겠습니다.
REPLACE_WITH="Blah
de
blah."
sed -i "s/TO_REPLACE/$REPLACE_WITH/g" file
새 줄이 포함 된 문자열로 sed를 사용하는 파일에서 문자열을 바꾸는 데 문제가 있습니다. 다음은 완전히 실패합니다. 나는 replace_with 문자열을 벗어나야 만한다고 가정하지만, 어떻게 할 수 없으며, 이것이 최선의 방법 일지라도 해결할 수는 없습니다. 어떤 도움을 주시면 감사하겠습니다.
REPLACE_WITH="Blah
de
blah."
sed -i "s/TO_REPLACE/$REPLACE_WITH/g" file
답변:
이것은 "이중 탈출"이 필요하지만 이스케이프 문자는 sed의 "s"명령에 도달해야하므로 bash 쉘에서도 이스케이프해야합니다. ( "트리플 이스케이프"?)
REPLACE_WITH="Blah\\
de\\
blah."
sed -i "s/TO_REPLACE/$REPLACE_WITH/g" file
Bash는 "\\"를 하나의 "\"로 디코딩하고 send 명령에 하나의 '\'를 넣고 sed 명령은 끝나지 않은 개행을 의미하는 '\ {newline}'으로 해석합니다. 명령.
각 행의 끝에 '\'가 하나만 있다면 bash는 '\ {newline}'을 'nothing'으로 간주합니다. 즉, 개행과 백 슬래시는 완전히 제거됩니다.
bash-sed-awk에 대한 기본 규칙 ... 백 슬래시가 작동하지 않으면 다시 두 번 시도하십시오.