我们怎样才能删除所有数字 和 。使用 vim 在文件中的所有行中添加(点)?

我们怎样才能删除所有数字 和 。使用 vim 在文件中的所有行中添加(点)?

我们怎样才能删除所有数字 和 。 (点)使用 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 magicvim

顺便说一句,更简单的正则表达式(如:%s/[0-9.]\+//g)也会删除用作标点符号的句点(例如在句子末尾或省略号...)。

答案2

tr您可以使用正则表达式来执行此操作,但我认为删除所需的字符范围更简单:

:%!tr -d '.[0-9]'

冒号启动“命令模式”。意思%是“整个缓冲区”;意思!是“通过以下 shell 命令过滤指定范围(整个缓冲区)(即将其输入命令的标准输入,并在 Vim 中将其替换为该命令的标准输出)”。

答案3

您可以将两个替代命令与一个|符号链接在一起。因此,您可以先删除所有数字 ( \d),然后删除所有句点 ( \.):

:%s/\d//g | %s/\.//g

您还可以在单​​个替换命令中使用管道作为“OR”运算符:

:%s/\d\|\.//g

相关内容