
C++
내 시스템의 폴더에 컴파일하려는 프로젝트가 있습니다 .
이 프로세스에서는 C++
내 컴파일러 버전에서 지원되지 않는 일부 관용구를 사용합니다. 특히 코드 내부에서는 데이터 값을 사용하는 경우가 많습니다 'nullptr'
.
내가 하고 싶은 것은 의 모든 항목을 로 바꾸는 것 nullptr
입니다 NULL
.
VIM
다음 명령을 사용하여 이 작업을 수행할 수 있습니다 .
:%s/nullptr/NULL/g
각 파일을 열고 명령을 실행하지 않고 디렉터리의 모든 파일에 대해 이 작업을 한 번에 수행하려면 어떻게 해야 합니까?
답변1
for file in /path/to/dir/*; do
sed -i s/nullptr/NULL/g "$file"
done
그러나 이는 하위 디렉터리에는 영향을 미치지 않습니다.
편집 1
더 빠른 솔루션(GNU 사용):
find /path/to/dir -type f -print0 | xargs -0 sed -i s/nullptr/NULL/g
이는 하위 디렉터리(및 도트 파일)에도 영향을 미칩니다. -maxdepth 1
원하지 않는 경우 추가하십시오 .
답변2
이를 수행하는 두 가지 방법:
정력
다음과 같이 명령줄에서 vim을 사용할 수 있습니다.
$ vim -c "%s/nullptr/NULL/g|wq" foo.txt
for 루프로 감싸십시오.
$ for i in *; do vim -c "%s/nullptr/NULL/g|wq" -- "$i"; done
펄
$ perl -p -i -e 's/nullptr/NULL/g' foo.txt
for 루프로 감싸십시오.
$ for i in *; do perl -p -i -e 's/nullptr/NULL/g' -- "$i"; done
또는 간단하게:
$ perl -p -i -e 's/nullptr/NULL/g' -- *
답변3
GNU 도구 사용:
grep -rlZ nullptr /path/to/dir |
xargs -r0 sed -i s/nullptr/NULL/g
모든 파일을 다시 작성하지 않아도 됩니다.
와 마찬가지로 sed -i
링크(하드 및 소프트)가 끊어지고, 파일의 소유권과 권한이 변경되고, 파일의 희박성 및 기타 일반적이지 않은 특성이 변경될 수 있다는 점을 명심하세요. 또한 grep
이전 버전의 GNU 는 2.12
.-r