我有几个文本文件。所有这些文本文件都需要经过一组编辑,可以在vim. 我想自动化这个。vim有几个替换命令。假设文本文件需要进行以下替换:
%s/boy/Boy/g%s/girl/Girl/gg/^$/d这只是一个简单的例子,有没有办法编写所有这些规则,然后在几个文件上自动执行?
Ant*_*hon 15
是的,有一种方法可以自动执行此操作。它从为工作选择正确的工具开始。
在这种情况下,您应该使用 egsed而不是试图弯曲vi它是为交互使用(而不是自动化)而设计的。
for 的替换语法与 for 的替换语法sed大致相同vi。
sed -i.backup 's/boy/Boy/g' file-name-1 file-name-2 ...
Run Code Online (Sandbox Code Playgroud)
zza*_*per 13
Vim 脚本 (gvim,vim) 可以很优雅并且很容易适应
vi -s edit.vim test.txt
Run Code Online (Sandbox Code Playgroud)
其中 edit.vim 包含( :wq 是可选的)
:%s/boy/Boy/g
:%s/girl/Girl/g
:g/^$/d
:wq
Run Code Online (Sandbox Code Playgroud)
其中 test.txt 包含
boys & girls
boys & girls
boy & girl
boys & girls
Run Code Online (Sandbox Code Playgroud)
这是一个用于清理“脏”文本文件的通用 vim 脚本
:" clean.vim
:" clean up a text file
:" delete DOS returns (actually superfluous because of non-ASCII
deletion)
:%s/\r//eg
:" delete any non-ASCII including invisibles
:%s/[\x00-\x1f\x80-\xff]/ /eg
:" compress multiple spaces
:%s/\s\s\+/ /eg
:" delete end of line spaces
:%s/\s\+$//e
:" compress multiple blank lines
:v/./,/./-j
:" sort eliminating duplicate lines
:%sort -u
Run Code Online (Sandbox Code Playgroud)
请记住,您也可以从 vim 中获取脚本
:source clean.vim
Run Code Online (Sandbox Code Playgroud)