명령줄 검색에서 이스케이프 문자를 검색하고 교체합니다. [중복]

명령줄 검색에서 이스케이프 문자를 검색하고 교체합니다. [중복]

Unix(MacOS High Sierra 실행)에서는 다음과 같은 검색/바꾸기(여러 파일에서)에 대한 몇 가지 다른 접근 방식을 보았습니다.

perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.txt

sed또는 grep등을 사용하십시오 . 문제는 검색 문자열을 올바르게 이스케이프하는 방법입니다. 예를 들어 http://my.site/dir로 바꿔야 하는 경우 http://new.my.site/dir이스케이프하지 않고는 검색 문자열에 슬래시를 포함할 수 없습니다.

답변1

구체적으로 이 명령을 사용하는 경우 Perl을 s///연산자로 사용하면 다른 구분 기호를 선택할 수 있으므로 /아무 것도 탈출할 필요가 없으므로 작업이 더 쉬워집니다.

따라서 다음이 작동합니다.

perl -pi -w -e 's!http://my.site/dir!http://new.my.site/dir!g;' *.txt

!소스 문자열이나 대체 문자열에 나타나지 않는 한 원하는 다른 문자를 사용할 수 있습니다 . 또한 전체 "스크립트"가 해당 콘텐츠 아래에 있으므로 셸은 이를 구문 분석하지 않으므로 셸 등에 '의한 콘텐츠 보간으로부터도 보호됩니다 .$

바라보다https://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators모든 세부정보를 확인하세요.

관련 정보