我在脚本中使用 vim 的 ex 模式对文本文件执行 vim 正则表达式和替换。
ex $NAME <<EOEX
:%s/<.\{-}>//g
:%s/\[.\{-}\]//g
:%s/ / /g
:%s/^Contents$
:%s/^\d.*$
:%s/ (.\{1,4\})//g
:g/^$\n^$/d
:x
EOEX
我遇到了正则表达式的问题:%s/ ([^)]\{-}[^\d0-\d1000].\{-})//g
(未显示)。当在其中找到值大于 1000 的字符时,我正在使用它来过滤掉括号集及其内容。这个表达式在放入上面的 ex 命令时会删除所有的括号和内容,所以我不得不用以下方式调用它:
vim $NAME -c ':%s/ ([^)]\{-}[^\d0-\d1000].\{-})//g' -c ':wq'
效果很好。有没有人知道为什么在使用 -c 选项而不是作为 ex 模式下的命令时它可以工作?
(附带问题: <<'EOEX ... EOEX'的语法是做什么的?我找不到任何文档。 编辑:据我所知,使用<<'EOEX ... EOEX'是Here 文档,EOEX 包装了传递给 ex $NAME 命令的字符串文字。在我看来,标识的包装名称(在我的情况下为 EOEX)是任意的)