我已经习惯在Vim中使用表达式来替换大文件,并且想知道要学习哪些实用程序,这将允许我以类似的方式在文件夹中执行此类操作。 什么命令行程序的搜索和替换最像vims和跨文件夹工作?
答案 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自动化:
唯一的区别是缺少备份文件创建(使用某些.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命令