기준에 따라 여러 파일에서 검색 및 바꾸기

기준에 따라 여러 파일에서 검색 및 바꾸기

Visual Studio C++ 프로젝트를 Linux로 이식하고 모든 .h 및 .cpp 파일에서 #include로 시작하는 모든 줄을 찾고 해당 줄에서 백슬래시를 슬래시로 바꾸고 싶습니다.

온라인에서 검색하고 바꾸는 방법(예: Perl 또는 sed 사용)에 대한 일부 스크립트가 있지만 조건이 있는 스크립트는 없습니다.

가장 좋은 방법은 무엇입니까?

감사해요

답변1

sed에서는 /…/정규식을 명령 앞에(그 사이에) 배치하여 s해당 정규식을 포함하는 줄에서만 교체가 수행되도록 할 수 있습니다. 파일을 수정하는 옵션은 -iGNU sed에만 해당됩니다(Linux 및 Cygwin의 옵션).

sed -i -e '/^ *# *include/ s!\\\\!/!g' **/*.h **/*.cpp

Perl에서는 교체를 수행하기 전에 조건을 추가하기만 하면 됩니다.

perl -i -pe 'if (/^\s*#\s*include/) {s!\\\\!/!g}' **/*.h **/*.cpp
perl -i -pe '/^\s*#\s*include/ and s!\\\\!/!g' **/*.h **/*.cpp

**/현재 디렉터리와 하위 디렉터리의 파일을 반복적으로 일치시키는 구문에는 실행 후 zsh 또는 bash ≥4가 필요합니다 shopt -s globstar. 다른 쉘의 경우 find를 사용해야 합니다.

find \( -name '*.h' -o -name '*.cpp' \) -exec perl -i -pe '…' {} +

관련 정보