현재 클라이언트에 대해 CVS를 사용해야하고 원격 리포지토리에 대해 주소가 변경되었습니다. 로컬 코드에서 원격 주소를 변경하는 유일한 방법은 재귀 검색 및 바꾸기입니다.
그러나 sed 명령을 사용하면 다음과 같이 작동합니다.
find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;
모든 파일에 대해 오류가 발생합니다.
sed: 1: ".//file/path ...": invalid command code .
sed match / replacement에서 기간을 벗어나려고했지만 아무것도 해결되지 않습니다.
답변
OS X를 사용하는 경우 sed 명령과 관련이 없습니다. 의 OSX 버전 sed
에서 -i
옵션은 extension
인수를 예상 하므로 명령이 실제로 extension
인수 로 구문 분석되고 파일 경로가 명령 코드로 해석됩니다.
가산 시도 -e
명시 적으로 인수 및 제공 ''
에 대한 인수로 -i
:
find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \;
참조 이 .
답변
에 인수를 제공하는 것을 잊었습니다 -i
. 로 변경 -i
하십시오 -i ''
.
물론 이는 파일을 백업하지 않으려는 것을 의미합니다. 그렇지 않으면과 같이 선택한 확장 프로그램을 제공하십시오 -i .bak
.
답변
OS X에서는 내장 된 sed가 적절 해지지 않습니다. 해결책은 다음과 같습니다.
brew install gnu-sed
그런 다음 sed 대신 gsed를 사용하면 예상대로 작동합니다.
답변
아마도 새 도메인에 /
? 그렇다면, 이외의 구분 기호를 사용해보십시오 /
에서 sed
, 예를 들어 #
, ,
등
find ./ -type f -exec sed -i 's#192.168.20.1#new.domain.com#' {} \;
s///
변수 대체 또는 기타 예기치 않은 동작을 피하려면 큰 따옴표 대신 작은 따옴표 로 묶는 것이 좋습니다.