경로로 문자열이 있습니다.
/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')