删除不仅包含字符的行

3
我正在尝试删除除了字母和空格之外的任何其他字符所在的行。数字、逗号、引号、数学符号:所有包含这些内容的行都必须被删除。
输入:
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

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

5

:%g/[A-Za-z]/d 检查哪些行与字母匹配,然后删除不匹配的行。 由于每行都匹配,因此没有行将被删除。

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

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

1
dd_之间有什么区别? - Explosion Pills
3
:d 命令会将内容删除并保存到寄存器中,默认情况下会保存到无名寄存器。使用 :%d_ 命令可以将内容删除并保存到黑洞寄存器中,这意味着删除的文本不会影响其他寄存器。更多信息请参考 :h registers:h quote_ - Peter Rincker

4

您需要一个正则表达式来检查整行中是否只有字符,而非匹配所有行:

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

请注意,我包含了空格字符,因为您似乎也想允许它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接