我们怎样才能删除所有数字 和 。 (点)使用 vim 在文件内的所有行中?例如,我们有一个文件具有以下内容。
afsdfsd 0.98096764
afsdfd 0.98196765
0.98096764
afsadfsd 0.98096764
adfsd 0.98096764
aadfsd 0.98096425
0.98096425
afsadfsd 0.98096761
` 想知道我们如何使用 vim 中的某些功能来删除所有数字和数字中的点(在我的文件中,点仅存在于数字中)
afsdfsd
afsdfd
afsadfsd
adfsd
aadfsd
afsadfsd
答案1
:%s/[0-9]\+\(\.[0-9]\+\)\?//g
此基本正则表达式 (BRE) 搜索和替换操作会删除多一位数字(可选地后跟一个点和一位或多位数字)。
vim
也将 PCRE 理解\d
为 的同义词[[:digits:]]
,因此您可以使用以下命令缩短它:
:%s/\d\+\(\.\d\+\)\?//g
顺便说一句,请:help perl-patterns
参阅vim
.
这不仅会更短,而且还适用于0-9
不是数字或不是唯一数字的区域设置。
\v
你可以通过在正则表达式中使用来启用 vim 来使其更短(并且,在我看来,更具可读性)非常神奇正则表达式模式:
%s/\v\d+(\.\d+)?//g
另请参阅:help magic
中vim
。
顺便说一句,更简单的正则表达式(如:%s/[0-9.]\+//g
)也会删除用作标点符号的句点(例如在句子末尾或省略号...
)。
答案2
tr
您可以使用正则表达式来执行此操作,但我认为删除所需的字符范围更简单:
:%!tr -d '.[0-9]'
冒号启动“命令模式”。意思%
是“整个缓冲区”;意思!
是“通过以下 shell 命令过滤指定范围(整个缓冲区)(即将其输入命令的标准输入,并在 Vim 中将其替换为该命令的标准输出)”。
答案3
您可以将两个替代命令与一个|
符号链接在一起。因此,您可以先删除所有数字 ( \d
),然后删除所有句点 ( \.
):
:%s/\d//g | %s/\.//g
您还可以在单个替换命令中使用管道作为“OR”运算符:
:%s/\d\|\.//g