Mac에서 다음 명령을 사용하고 있습니다.
$find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \;
효과가없는 것 같습니다.
디렉토리에 .java로 끝나는 파일이 두 개 있습니다. 둘 다 foo 텍스트가 없습니다. 누락 된 것이 있습니까?
편집 : 댓글 요청 결과
[aafghani-03:~/test amirafghani]$ find . -name "*.java" -exec sed -i "s/foo/bar/g" {} \; sed: 1: "./bar.java": invalid command code . sed: 1: "./foo.java": invalid command code .
댓글
답변
먼저 일반 ASCII를 사용하고 있는지 확인하십시오. "
및 "
(ASCII 코드 0x22
및 , 각각) 셸 스크립트에서 사용합니다. 게시물의 예에 비표준 따옴표가 포함되어 있기 때문입니다. 자세히 살펴보면 약간 다르게 보입니다. 대부분은 서식있는 텍스트 문서의 복사-붙여 넣기 오류 일 수 있습니다. Word, OOWriter 또는 브라우저 창과 같은 형식입니다.
Mac에서는 FreeBSD의 sed
구현이있을 것입니다. 다음과 같이 명령을 작성해야하는 경우 :
find . -name "*.java" -exec sed -i "" s/foo/bar/g {} +
(여기서는 iv id = 대신 +
사용 “00a3d0c9c2″>
파일 당 하나의 sed
호출 실행을 방지합니다).
sed
플래그에는 백업 파일의 확장자 인 인수가 필요합니다. 예를 들어 -i .bak
의 경우이 명령은 다음 위치에서 교체를 수행하기 전에 먼저 file1.txt
를 file1.txt.bak
로 백업합니다. 원본 파일. 빈 인수 ""
를 사용하는 것은 백업 파일을 사용하지 않음을 의미하며, 원하는대로 보입니다.
GNU (또는 NetBSD, OpenBSD)에서도 마찬가지입니다. , busybox) 구현은 다음과 같습니다.
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
감사합니다. @bahamat 및 @Mikel 및 @ pieter-breed 귀하의 의견을 통해 제 답변을 개선했습니다.
주석
- 중괄호는 무엇을합니까?
- @ZaneHitchcox 중괄호는 일치하는 파일 이름에 대한 자리 표시 자입니다.
- what '
+
가 마지막에 수행합니까? - @Anthony the
+
는-exec
옵션의 인수 목록을 종료합니다.-exec
구문에 필요합니다.
-exec
및 그 이후의 모든 항목을 제거하면 어떻게됩니까? Java 파일의 이름이 인쇄됩니까? (' 걱정됩니다. ' ASCII 따옴표 대신 스마트 따옴표를 사용하고 있습니다.)"
및'
.