在我係統上的一個資料夾中,我有一個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