0

我在脚本中使用 vim 的 ex 模式对文本文件执行 vim 正则表达式和替换。

ex $NAME <<EOEX
    :%s/<.\{-}>//g
    :%s/\[.\{-}\]//g
    :%s/&#160;/ /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)是任意的)

4

0 回答 0