我有很多文件,我想删除第1行到第55行,然后为第25行到第35行添加注释(例如://),然后保存到新文件。
如何在bash shell上使用vim自动执行此操作?
答案 0 :(得分:15)
尽管使用ed
或sed
是一种常见做法 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
。