我有很多文件,每个文件都想要删除1到55行,给25到35行加上注释(例如//
),然后保存更改到一个新文件中。
我怎样才能使用Vim自动完成这些任务呢?或者能否借助Bash脚本来实现自动化操作?
尽管在这种情况下使用ed
或sed
是一种常见做法¹,但有时使用Vim更加方便。实际上,与其盲目地编写类似于ed
的脚本,通常更容易首先在Vim中以交互方式执行所需的操作:
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
命令保存每个副本)。¹ 当然,你也可以像使用ed一样使用Vim:
for f in file*.txt; do vim -c '1,55d|25,35s/^/\/\/ /|w!%_new|q!' "$f"; done
fix_file () {
ed -s "$1" <<-'EOF'
1,55d
25,35s_.*_// &_
wq
EOF
}
fix_file F
即可。
ex
比使用sed
更好,因为ex
使用与vi
相同的命令集。 - mu is too short