替换文件夹中包含的文件中所有出现的术语

Asl*_*986 5 shell-script text-processing files

在我系统上的一个文件夹中,我有一个C++要编译的项目。

这个过程使用了一些C++我的编译器版本不支持的习惯用法。特别是,通常在代码内部使用数据值'nullptr'

我想要做的是替换所有出现的nullptrwith NULL

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

:%s/nullptr/NULL/g 
Run Code Online (Sandbox Code Playgroud)

如何在不打开每个文件并执行命令的情况下对目录中的所有文件执行一次此操作?

Hau*_*ing 6

for file in /path/to/dir/*; do
  sed -i s/nullptr/NULL/g "$file"
done
Run Code Online (Sandbox Code Playgroud)

但是,这不会影响子目录。

编辑 1

更快的解决方案(使用 GNU):

find /path/to/dir -type f -print0 | xargs -0 sed -i s/nullptr/NULL/g
Run Code Online (Sandbox Code Playgroud)

这也会影响子目录(和点文件)。-maxdepth 1如果不需要,请添加。


slm*_*slm 4

有两种方法可以做到这一点:

维姆

您可以从命令行使用 vim,如下所示:

$ vim -c "%s/nullptr/NULL/g|wq" foo.txt
Run Code Online (Sandbox Code Playgroud)

包裹在 for 循环中:

$ for i in *; do vim -c "%s/nullptr/NULL/g|wq" -- "$i"; done
Run Code Online (Sandbox Code Playgroud)

珀尔

$ perl -p -i -e 's/nullptr/NULL/g' foo.txt
Run Code Online (Sandbox Code Playgroud)

包裹在 for 循环中:

$ for i in *; do perl -p -i -e 's/nullptr/NULL/g' -- "$i"; done
Run Code Online (Sandbox Code Playgroud)

或者简单地:

$ perl -p -i -e 's/nullptr/NULL/g' -- *
Run Code Online (Sandbox Code Playgroud)