sed - 이 스크립트가 잘못된 이유

sed - 이 스크립트가 잘못된 이유

나는 정규 표현식 장을 읽고 있습니다.클래식 쉘 스크립트샘플 코드를 입력하세요.

명령은 다음과 같습니다. "/home/tolstoy" 경로를 "/home/lt"로 변경합니다.

$ echo /home/tolstoy | sed 's;\(/home\)/tolstoy/;\1/lt/;'
/home/lt

그러나 내 노트북의 zsh에서 실행하면 반환 결과는 다음과 같습니다.

/home/tolstoy

이 명령이 잘못된 걸까요? 올바른 명령은 무엇입니까? 왜?

답변1

/정규 표현식에서 string 이후를 일치시키려고 합니다 tolstoy. 입력에 값이 존재하지 않으므로 /표현식이 일치하지 않습니다.

/입력에 포함되도록 수정합니다.

$ echo /home/tolstoy/ | sed 's;\(/home\)/tolstoy/;\1/lt/;'
/home/lt/

후행과 일치하지 않도록 수정되었습니다 /.

$ echo /home/tolstoy | sed 's;\(/home\)/tolstoy;\1/lt/;'
/home/lt/

( 후행 입력 tolstoy에 관계없이 ) 올바르게 찾은 상위 디렉토리를 수정 하고 해당 경로 끝에 추가하십시오./lt

$ printf '%s/lt\n' "$(dirname /home/tolstoy)" 
/home/lt

또는,

$ printf '%s\n' "$(dirname /home/tolstoy)/lt" 
/home/lt

일반적으로 Unix 경로 이름에는 줄 중심 텍스트 편집 도구를 사용하지 마십시오. 그렇게 하면 작성 중인 스크립트나 명령이 개행 문자가 포함된 특정 경로 이름(흔하지는 않지만 유효함)에서 제대로 작동하지 못하게 됩니다.

관련 정보