文本替换文件数

时间:2011-06-27 06:27:27

标签: vim replace full-text-search

我已经习惯在Vim中使用表达式来替换大文件,并且想知道要学习哪些实用程序,这将允许我以类似的方式在文件夹中执行此类操作。 什么命令行程序的搜索和替换最像vims和跨文件夹工作?

3 个答案:

答案 0 :(得分:5)

sed -i.bak 's/foo/bar/g' * 

将在当前目录中的每个文件的每一行上用foo替换每个bar,并创建一个扩展名为.bak的备份文件。

所以我会调查sed。但是...... Vim很有能力:

vim -c "bufdo!%s/foo/bar/g" -c "wqa" *

几乎是一样的。 bufdo!执行以下命令(在这种情况下为%s/foo/bar/g =>在每一行foo上替换每个bar %是每个行的特殊行地址线))。 wqa表示:写下所有然后退出。您最多可以指定10个-c切换到Vim,这将按指定的顺序执行。所以,基本上这是Vim自动化:

  1. 打开当前dir =>中的每个文件每个文件都有自己的缓冲区
  2. 在每个缓冲区上执行替换
  3. 然后写文件并退出
  4. 唯一的区别是缺少备份文件创建(使用某些.vimrc设置可以轻松实现)。但是sed更快。

答案 1 :(得分:2)

可能,你应该使用vim而不是外部命令行程序。请参阅:help :find:help :grep

例如,如果您想在文件夹中搜索单词,请传递**/*.txt

答案 2 :(得分:2)

你可以通过组合perl和bash来做到这一点 例如:

find . -type f -name "*.cpp" -print | xargs perl -i -pe 's/pattern/replace/g' 

这将找到所有以'。'开头的'.cpp'文件。并将每个(路径)传递(管道)到perl命令