sed Error sed : -e expression # 1, char 7 : unterminated`s 'command
Windows 10에서 명령 프롬프트와 git bash 쉘 사이를 계속 전환합니다. 명령 프롬프트 (cmd.exe)의 클립 보드에 현재 디렉토리를 복사하고 git bash에서 해당 디렉토리로 전환하고 싶다고 가정하고 함수를 작성했습니다. Windows 경로를 git bash 경로로 변환하고 실행 한 내 .bashrc 파일의 d2u ()는 잘 작동했습니다.
anjan@DESKTOP-RPUVCRE MINGW64 /d
$ cat /dev/clipboard D:\work\playground\reactNative anjan@DESKTOP-RPUVCRE MINGW64 /d $ type d2u
d2u is a function
d2u ()
{
cat /dev/clipboard | sed -r "s'\\\\'/'g" | sed -r "s'^D:'/d'g" | sed -r "s'^C:'/c'g"
}
anjan@DESKTOP-RPUVCRE MINGW64 /d
$ pushd `d2u`
/d/work/playground/reactNative /d /d/work/playground/reactNative /d /d/work/playground/reactNative ~
anjan@DESKTOP-RPUVCRE MINGW64 /d/work/playground/reactNative
그러나 새로운 기능인 cd2u에서 그 unixy 경로로 푸시하도록 점진적으로 개선하면 폭탄이 터집니다!
anjan@DESKTOP-RPUVCRE MINGW64 /d/work/playground/reactNative
$ type cd2u
cd2u is a function
cd2u ()
{
pushd `cat /dev/clipboard | sed -r "s'\\\\'/'g" | sed -r "s'^D:'/d'g" | sed -r "s'^C:'/c'g" `
}
anjan@DESKTOP-RPUVCRE MINGW64 /d/work/playground/reactNative
$ cd2u sed: -e expression #1, char 7: unterminated `s' command /d /d/work/playground/reactNative /d/work/playground/reactNative /d /d/work/playground/reactNative ~ anjan@DESKTOP-RPUVCRE MINGW64 /d $
무엇을 제공합니까? 이 오류가 발생하는 이유는 무엇입니까?
sed: -e expression #1, char 7: unterminated `s' command
내 sed 버전은 비교적 새롭습니다
$ sed-버전 sed (GNU sed) 4.8
답변
백틱 ( ``)은 백 슬래시를 해석 하기 때문 입니다. 이렇게하면 \\\\백틱이 백틱 이 \\없는 것처럼 작동 합니다. 그런 다음 큰 따옴표도 백 슬래시를 해석하기 때문에 sedas 가 됩니다 \. 그리고 10 은 이스케이프 된sed 것으로 해석 \'됩니다 . '
$()백틱 대신 사용하십시오 . 이 구문은 추가 수준의 백 슬래시 해석을 도입하지 않습니다. $()어쨌든 요즘 은 당신의 선택이어야합니다.
그리고 따옴표 (힌트 : 큰 $()따옴표는 안에있는 따옴표를 방해하지 않습니다 $()).
그리고 혼자 두십시오cat .
참고 : 나는 당신의 sed표현 을 검토하거나 검토하지 않을 것 입니다. 그들은 당신이하고 싶은 일에 옳거나, 틀렸거나, 차선책 일 수 있습니다. 함수 호출에서 함수 본문으로 백틱을 이동하여 오류가 발생하는 방식을 설명하고 있습니다.