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

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

在我系统上的一个文件夹中,我有一个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

相关内容