![bash는 문자열의 모든 슬래시에 대해 백슬래시를 삽입합니다.](https://linux55.com/image/205062/bash%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EC%8A%AC%EB%9E%98%EC%8B%9C%EC%97%90%20%EB%8C%80%ED%95%B4%20%EB%B0%B1%EC%8A%AC%EB%9E%98%EC%8B%9C%EB%A5%BC%20%EC%82%BD%EC%9E%85%ED%95%A9%EB%8B%88%EB%8B%A4..png)
경로로 문자열이 있습니다.
/tmp/something
백슬래시를 사용하여 슬래시를 이스케이프 처리해야 합니다.
\/tmp\/something
어떻게 해야 하나요? 아마도 sed
?
올바른 방향을 알려주세요.
답변1
Bash의 자체 변수 조작 방법(매개변수 확장)을 사용하여 이 작업을 수행할 수 있지만 구문은 매우 끔찍합니다.
$ string='/tmp/something'
$ escapedstring="${string//\//\\\/}"
$ printf '%s\n' "$escapedstring"
\/tmp\/something
이를 더 자세히 설명하기 위해 bash에서는 ${var//xxx/yyy}
"변수를 가져오고 var
모든 항목을 xxx
" 로 대체하는 것을 의미합니다 yyy
. 이 경우 대체 측과 대체를 지정할 때 슬래시를 이스케이프해야 합니다. 전자는 \/
단일 슬래시용이고 후자는 \\\/
백슬래시와 전방 슬래시를 추가한 것이므로 우스꽝스러운 ${string//\//\\\/}
모양이 .
백슬래시 문자는 구현이나 환경에 따라 직접 처리될 수 있으므로 echo
내용을 표시하는 데 사용하지 마십시오 .echo
답변2
sed
올바른 방향입니다! 비슷한 튜토리얼을 따르세요https://www.grymoire.com/Unix/Sed.html#uh-1;가장 기본적인 방법은
echo $string | sed 's;old;replacement;g'
s
명령이 있는 곳(예: "검색 및 바꾸기")은 g
"완료될 때까지 모든 줄에서 반복"을 의미하는 플래그이며, old
바꾸려는 항목( /
귀하의 경우)은 replacement
바꾸려는 항목입니다. (백슬래시를 이스케이프 처리해야 할 수도 있으므로 \\/
.)
재미있게 보내세요!
답변3
이 라인을 따라 수행할 수 있는 몇 가지 작업이 있습니다.
# let
str='/tmp/something'
str_esc=$(printf '%s\n' "$str" | sed 's:/:\\&:g')