내 시스템의 폴더에 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