Visual Studio C++ 프로젝트를 Linux로 이식하고 모든 .h 및 .cpp 파일에서 #include로 시작하는 모든 줄을 찾고 해당 줄에서 백슬래시를 슬래시로 바꾸고 싶습니다.
온라인에서 검색하고 바꾸는 방법(예: Perl 또는 sed 사용)에 대한 일부 스크립트가 있지만 조건이 있는 스크립트는 없습니다.
가장 좋은 방법은 무엇입니까?
감사해요
답변1
sed에서는 /…/
정규식을 명령 앞에(그 사이에) 배치하여 s
해당 정규식을 포함하는 줄에서만 교체가 수행되도록 할 수 있습니다. 파일을 수정하는 옵션은 -i
GNU 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 '…' {} +