我正在使用vim,我想删除一个有句号的整行(。)但是没有以下字符:,ö,ä,ë
#!/usr/bin/env bash
dir = "."
for f in "$dir"/*; do
cp -r Source "$f"
done
下面是我正在使用的正则表达式语句。我正在使用替代声明,因为我想确认每次删除,但我愿意接受任何解决方案(即good. bad # gets deleted
göod. # does not get deleted
bäd. goëd # does not get deleted
go:od. # does not get deleted
)。
%g//d
答案 0 :(得分:1)
这就像我能得到它一样简单。只是对一个fullstop的基本检查,并确保它之前和之后的所有内容(在该行上)不是alt字符。请注意,您可能需要将前导^
和$
替换为\n
,或者可能需要在命令行中添加另一个标记以使其在每行中找到它。
^[^:öäë]*\.[^:öäë]*$
或翻译用于VIM(对Sundeep的赞誉):
:g/^[^:öäë]*\.[^:öäë]*$/d
答案 1 :(得分:1)
.
那样微不足道,那么这是一个更通用的解决方案:
/^\%(.*[:öäë]\)\@!.*\./
这会在错误字符\@!
之后的任何地方从行^
的开头断言不匹配.*[:öäë]
,然后匹配(从头开始,因为断言没有消耗任何字符)文字句点.*\.
您可以在:global
以及:substitute
中使用此正则表达式:
:%s/^\%(.*[:öäë]\)\@!.*\..*\n//c