폴더에 포함된 파일에서 해당 용어의 모든 발생을 바꿉니다.

폴더에 포함된 파일에서 해당 용어의 모든 발생을 바꿉니다.

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

관련 정보