문자열 = "이 문장 삭제"가 있다고 가정해 보겠습니다.
현재 디렉터리의 모든 파일과 현재 디렉터리의 하위 디렉터리에 있는 모든 파일에서 이 문자열을 제거하고 싶습니다.
달성하는 방법?
나는 이것을 시도했습니다 :
sudo grep -rl stringtoreplace ./ | xargs sed -i 'stringtoreplace//g'
sudo를 사용해도 여전히 권한 오류가 발생합니다!
교체할 문자열은 다음과 같습니다.
,"\x3E\x74\x70\x69\x72
답변1
for file in $(find . -mindepth 1 -type f); do sed -i 's/remove\ this\ sentence/stringtoreplace/g' $file; done
그것을 분석해 봅시다.
$(find.-minlength1-typef)
그러면 작업 디렉터리에서 시작하는 모든 파일을 찾아 전체 경로로 반환합니다. 재귀는 검색하는 최소 깊이가 하나(동일한 디렉터리) 또는 여러 하위 디렉터리 깊이임을 의미합니다.
sed -i 's/remove\ this\ 문장/stringtoreplace/g'
-i modify file in-place
/g all occurrences of "remove this sentence" in lines as they're read.
그런 다음 파일을 반복하는 "for" 루프가 있습니다.
더 쉬울 수도
또 다른 방법은 다음과 같습니다.
find . -mindepth 1 -type f -exec sed -i 's/remove\ this\ sentence/stringtoreplace/g' {} \;
...그건 같은거야. 여기서는 find를 사용하여 파일을 찾고 발견된 각 파일에 대해 sed 내부 바꾸기 명령을 실행합니다.