폴더의 모든 파일에서 문자열을 재귀적으로 검색하고 싶습니다.
문자열이 발견되면 파일을 동일한 위치( 에 복사 <filename>-orig
)에 백업하고 발견된 문자열을 다른 문자열로 바꿉니다.
어떻게 하나요?
명령어 하나로 할 수 있나요? 감사해요.
답변1
두 가지 -exec
작업을 결합할 수 있습니다 find
. 먼저 일치하는 문자열이 포함된 모든 파일을 찾고 두 번째로 문자열을 교체 키워드로 바꿉니다(원본 파일의 백업 유지).
find . -type f -exec grep -il "searchstring" {} \; -exec sed -i.bak \
's/searchstring/replacestring/' {} \;
설명하다:
-exec grep -il "searchstring"
:"searchsring"을 검색하세요-exec sed -i.bak 's/searchstring/replacestring/'
: 문자열이 포함된 파일이 발견되면 해당 파일의 백업을 유지하고 "replacestring"으로 바꿉니다.
이 경우 두 번째 명령은 첫 번째 명령이 성공적으로 반환된 경우에만 실행됩니다.