自动编辑多个文件

use*_*292 6 vim

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

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

ib.*_*ib. 15

尽管使用ed或是sed常用做法1,但有时使用Vim更方便.2 实际上,在这种情况下,不是ed"盲目地" 编写类似的脚本,而是更容易以交互方式执行所需的一个文件编辑

vim -w log.vim file1.txt
Run Code Online (Sandbox Code Playgroud)

然后在其余文件上重复它.

for f in file*.txt; do vim -s log.vim "$f"; done
Run Code Online (Sandbox Code Playgroud)

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

gg55dd:25,35s/^/\/\/ /
:w %_new
:q!
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

2更不用说在问题中明确指出Vim解决方案是首选.


uli*_*tko 6

您可以使用ed优雅地完成此操作,它是 unix 行编辑器,也是 vi 的祖先。

fix_file () {
  ed -s "$1" <<-'EOF'
    1,55d
    25,35s_.*_// &_
    wq   
EOF
}
Run Code Online (Sandbox Code Playgroud)

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