이 줄이 있어요
find . -type f \( ! -name '*.plist' \) -and \( ! -name '*.mp4' \) -and \( ! -name '.DS*' \) -print0 | xargs -0 sed -i 's/AAA/BBB/g'
내 목적은 .plist, .mp4 및 .DS* 확장자를 가진 파일을 제외하고 현재 디렉터리의 모든 파일에서 모든 AAA 항목을 BBB로 반복적으로 변경하는 것입니다.
그런데 메시지를 받았어
sed: 1: "./myDir/pro ...": invalid command code .
답변1
가장 간단한 해결책은 다음을 사용하는 것입니다.
find . -type f \( ! -name '*.plist' \) -and \( ! -name '*.mp4' \) -and \( ! -name '.DS*' \) -print0 | xargs -0 perl -pi -w -e 's/AAA/BBB/g'
답변2
GNU sed와 달리 Mac OSX와 함께 제공되는 sed에는 -i
백업 접미사를 지정하는 옵션 인수가 필요합니다. 백업을 억제하려면 빈 문자열( ''
)을 전달해야 합니다. 따라서 sed는 your을 s/AAA/BBB/
백업 접미사로 해석하고 첫 번째 파일 이름( ./myDir/pro ...
)을 실행할 명령으로 해석합니다. 물론 .
이것은 유효한 sed 명령이 아니므로 오류가 발생합니다. 이를 염두에 두고 다음이 작동합니다.
find [...] | xargs -0 sed -i.bak 's/AAA/BBB/g'
또는 백업 억제를 고집하는 경우
find [...] | xargs -0 sed -i '' 's/AAA/BBB/g'