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解决方案是首选.
您可以使用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.