sed
Linux에서 텍스트를 검색 / 바꾸기 위해 다음 명령을 성공적으로 사용했습니다 .
sed -i 's/old_link/new_link/g' *
그러나 Mac OS X에서 시도하면 다음과 같은 결과가 나타납니다.
“명령 c는 \ 다음에 텍스트가 필요합니다”
내 Mac이 정상적인 BASH 셸을 실행한다고 생각했습니다. 뭐야?
편집하다:
@High Performance에 따르면, 이것은 Mac sed
의 BSD 풍미가 다르기 때문에 BSD 에서이 명령을 어떻게 복제 sed
합니까?
편집하다:
이것을 일으키는 실제 예는 다음과 같습니다.
sed -i 's/hello/gbye/g' *
답변
-i
옵션 을 사용하는 경우 백업 확장명을 제공해야합니다.
당신이 가지고 있다면:
File1.txt
File2.cfg
명령 ( -i
및 새로운 버전의 Mac 및 GNU에서 작동 ''
하도록 -e
하기 위해 및 사이에 공간이 부족함 ) :
sed -i'.original' -e 's/old_link/new_link/g' *
다음과 같은 2 개의 백업 파일을 작성하십시오.
File1.txt.original
File2.cfg.original
모든 경우에 작동하는 sed 명령을 혼합하여 찾을 수 없기 때문에 백업 파일 작성을 피하는 휴대용 방법은 없습니다.
sed -i -e ...
–-e
백업 을 생성 할 때 OS X에서 작동하지 않습니다sed -i'' -e ...
-OS X 10.6에서는 작동하지 않지만 10.9+에서는 작동합니다.sed -i '' -e ...
-GNU에서 작동하지 않습니다
참고 모든 플랫폼에서 작동하는 sed 명령이없는 경우 다른 명령을 사용하여 동일한 결과를 얻을 수 있습니다.
예 : perl -i -pe's/old_link/new_link/g' *
답변
-i를 사용할 때 OS X에 백업 파일의 확장자가 필요하다고 생각합니다 . 시험:
sed -i .bak 's/hello/gbye/g' *
GNU를 사용 sed
하는 확장은 선택 사항 입니다.
답변
이것은 sed의 GNU 및 BSD 버전 모두에서 작동합니다.
sed -i'' -e 's/old_link/new_link/g' *
또는 백업 :
sed -i'.bak' -e 's/old_link/new_link/g' *
-i
옵션 뒤에 공백이 없습니다 . (GNU sed에 필요)
답변
Mac에서 동일한 문제가 있었고 다음과 같이 해결했습니다 brew
.
brew install gnu-sed
로 사용
gsed SED_COMMAND
sed
별명으로 설정할 수도 있습니다 gsed
(원하는 경우).
alias sed=gsed
답변
또는 Mac에 gsed라고하는 sed의 GNU 버전을 설치하고 표준 Linux 구문을 사용하여 사용할 수 있습니다.
이를 위해 gsed
포트를 사용하여 설치하십시오 (없는 경우 http://www.macports.org/ 에서 구 하십시오 ) sudo port install gsed
. 그런 다음 실행할 수 있습니다sed -i 's/old_link/new_link/g' *
답변
Mac은 실제로 BASH 셸을 실행하지만 이는 처리중인 sed의 구현에 대한 질문입니다. Mac에서 sed는 BSD에서 제공되며 일반적인 Linux 상자에서 찾을 수있는 sed와 미묘하게 다릅니다. 나는 당신을 제안합니다 man sed
.
답변
Sinetris의 대답은 옳지 만 find
명령 과 함께 사용 하여 변경하려는 파일을 더 구체적으로 지정합니다. 일반적으로 이것은 작동해야합니다 (osx에서 테스트 됨 /bin/bash
).
find . -name "*.smth" -exec sed -i '' 's/text1/text2/g' {} \;
복잡한 프로젝트에서 사용 sed
하지 않고 일반적으로 사용하는 경우 find
효율성이 떨어집니다.