2011-06-27 75 views
2

我已经习惯使用Vim中的表达式来替换大文件,并想知道通过什么实用程序学习,这将允许我以类似的方式在文件夹中执行这样的事情。 什么命令行程序的搜索和替换是最像vims和跨文件夹?将文本替换为多个文件

回答

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

将取代每foobar上在代替当前目录下的每个文件的每一行,并创建一个备份文件,.bak扩展。所以我想看看sed。但是... Vim很有能力:

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

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

  1. 都开在当前目录下的文件=>每个文件都有自己的缓冲区
  2. 执行代替每个缓冲
  3. 然后写入文件,并退出

唯一的区别是缺少备份文件创建(可通过一些.vimrc设置轻松实现)。但sed更快。

+0

您能详细说明'bufdi!%s'和'wqa'在这里做什么吗? – Prospero

+0

答复已更新。 –

2

大概你应该用vim不是外部命令行程序。请参阅:help :find:help :grep

例如,如果要跨文件夹grep单词,请通过**/*.txt

2

你可以通过例如结合Perl和庆典 做到这一点:

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

这会发现所有“的.cpp”的文件开始在“”并将它们中的每一个(路径)传递给perl命令

+0

感谢您的查找提示。使用.css脚本这样的优秀工具,我几乎觉得脏了;) – Prospero

相关问题