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