替換資料夾中包含的文件中出現的所有術語

替換資料夾中包含的文件中出現的所有術語

在我係統上的一個資料夾中,我有一個C++正在嘗試編譯的專案。

這個過程使用了一些C++我的編譯器版本不支援的習慣用法。特別是,在程式碼內部經常使用資料值'nullptr'

我想做的是將所有出現的 替換nullptrNULL

我可以使用以下命令執行此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

相關內容