删除仅不包含字符的行

Wor*_*ice 3 regex vim text

我正在尝试删除包含字母和带空格的字符之外的其他内容的行。数字,逗号,引号,数学符号:必须删除与它们的任何一行。

输入:

FISIOLOGIA UMANA
FISIOLOGIA UMANA
http://id.loc.gov/vocabulary/subjectSchemes/FI
Sepúlveda, Luis
La sirenetta Walt Disney
La sirenetta
CFIV007842
CFIV006619
Lubac, Henri : de
Roma
Run Code Online (Sandbox Code Playgroud)

预期产量:

FISIOLOGIA UMANA
FISIOLOGIA UMANA
La sirenetta Walt Disney
La sirenetta
Roma
Run Code Online (Sandbox Code Playgroud)

到目前为止,我:%g!:[A-Za-z]:d与一起使用Vim,应该可以解决问题。奇怪的是,它声明它匹配每行(如预期的那样),但是它不会删除发现非字母字符的行。这种行为背后的原因是什么?如何巧妙地解决这个问题?

Pet*_*ker 5

:%g!:[A-Za-z]:d正在检查哪些行与字母表匹配,然后删除不匹配的行。由于每行都匹配,因此不会删除任何行。

我认为搜索要删除的字符会更容易:

:g/[^a-zA-Z ]/d_
Run Code Online (Sandbox Code Playgroud)

  • `:d`将删除到寄存器中。默认情况下,这是未命名的寄存器。`:%d_`将删除到黑洞寄存器中,这意味着删除的文本不会更改任何其他寄存器。参见`:h register'和`:h quote_` (3认同)