Shell-Script

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

  • July 22, 2018

在我係統上的一個文件夾中,我有一個C++正在嘗試編譯的項目。

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

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

我可以VIM使用以下命令執行此操作:

:%s/nullptr/NULL/g 

如何在不打開每個文件並執行命令的情況下對目錄中的所有文件執行此操作?

有兩種方法可以做到這一點:

我來了

您可以從命令行使用 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

$ 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' -- *
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如果不需要,請添加。

引用自:https://unix.stackexchange.com/questions/73795