删除仅不包含字符的行

时间:2019-03-07 15:29:07

标签: regex text vim

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

输入:

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

预期输出:

FISIOLOGIA UMANA
FISIOLOGIA UMANA
La sirenetta Walt Disney
La sirenetta
Roma

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

2 个答案:

答案 0 :(得分:5)

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

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

:g/[^a-zA-Z ]/d_

答案 1 :(得分:4)

您的正则表达式匹配所有行。您需要一个可以检查 entire 行上只有字符的字符:

:%g!:^[A-Za-z ]\+$:d

还请注意,由于您似乎也希望允许使用空格字符,因此我也添加了空格字符。