bash는 문자열의 모든 슬래시에 대해 백슬래시를 삽입합니다.

bash는 문자열의 모든 슬래시에 대해 백슬래시를 삽입합니다.

경로로 문자열이 있습니다.

/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')

관련 정보