自动编辑多个文件

时间:2011-05-09 03:10:25

标签: vim

我有很多文件,我想删除第1行到第55行,然后为第25行到第35行添加注释(例如://),然后保存到新文件。

如何在bash shell上使用vim自动执行此操作?

2 个答案:

答案 0 :(得分:15)

尽管使用edsed是一种常见做法 1 , 有时候使用Vim会更方便。 2 确实,在这种情况下 而不是“盲目地”写一个ed - 类似的脚本,它更容易执行 希望用

交互式编辑其中一个文件
vim -w log.vim file1.txt

然后在其余文件上重复。

for f in file*.txt; do vim -s log.vim "$f"; done

在您的情况下,log.vim文件可能包含与此类似的内容:

gg55dd:25,35s/^/\/\/ /
:w %_new
:q!

注意,要使用新名称保存文件,不应直接键入,但是 而是使用%替换。另一种方法是复制文件 事先,然后在适当的位置编辑它们(通过:w保存每个。)

这种方法的优点是您可以进行所有更改 以交互方式确保您获得想要的结果。


1 当然,你也可以ed的方式做同样的事。

for f in file*.txt; do vim -c '1,55d|25,35s/^/\/\/ /|w! '"${f}_new"'|q!' $f

2 更不用说在问题中明确说明了这一点 首选Vim解决方案。

答案 1 :(得分:3)

您可以使用ed,unix行编辑器,vi的祖先来优雅地完成此任务。

fix_file () {
    ed $1 <<< EOF
    1,55d
    25,35s_.*_// &_
    wq   
    EOF
}

现在,对于您需要的每个文件F,只需执行fix_file F