URL과 함께 sed를 사용하여 재귀적으로 찾기-바꾸기

URL과 함께 sed를 사용하여 재귀적으로 찾기-바꾸기

전체 URL 구성표를 교체해야 하는 많은 파일 세트가 있습니다. 일부 파일 이름에는 공백이 포함되어 있습니다. 많은 검색과 시행착오 끝에 이것이 내가 얻은 가장 가까운 것입니다.

find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +

결과 파일에는 구성표가 http:제거되어 //'//www.domain.com' 만 남습니다.

또한 새 파일이 생성되어 -e파일 이름에 추가됩니다. - 즉, some file.php-e분명히 원하지 않는 것입니다.

이것만으로도 충분하겠지만(파일 을 제거한 후 *-e내 안의 OCD는 이 작업을 올바르게 수행하는 방법을 정말로 알고 싶어합니다. 참고: 저는 Mac에서 로컬로 작업하고 있지만 Linux에서도 이 작업을 수행할 예정입니다.)

어떤 아이디어라도 대단히 감사하겠습니다!

답변1

솔루션 1: 한 가지 방법은 다음 find과 함께 사용하는 것입니다 xargs.

find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'

솔루션 2: 또 다른 하나는 귀하의 질문과 매우 유사하게 findwith 를 사용하는 것입니다 .-exec

find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +

두 솔루션 모두 sed여러 파일을 인수로 호출합니다. 따라서 sed모든 파일에 대해 한 번 호출되는 것이 아니라 모든 파일 세트에 대해 호출됩니다.

솔루션 3: 대신 검색 대체 작업에 sed사용할 수도 있습니다 .perl

perl -i -pe 's#http://domain.com#https://www.domain.com#g' file

find/ 명령 과 결합 xargs:

find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'

관련 정보