我有很多文件,我想在每个文件中删除第 1 行到第 55 行,在第 25 行到第 35 行添加注释前导(例如 //
),然后将更改保存到新文件中。
如何单独使用 Vim 或在 Bash 脚本的帮助下自动执行此操作?
最佳答案
尽管使用 ed
或 sed
是一种普遍做法1
在这种情况下,有时使用 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
命令来保存每个论据)。
这种方法的优点是您可以进行所有更改
以交互方式,确保您在
至少在其中一个文件上,在对其余文件执行编辑之前
其中。
1 当然,您可以在
ed
中使用 Vim - 也像时尚:for f in file*.txt; do vim -c '1,55d|25,35s/^/\/\/ /|w! '"${f}_new"'|q!' "$f"; done
关于vim - 如何在 Vim 中自动编辑多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932102/