如何使用 sed 匹配后跟点的数字?

如何使用 sed 匹配后跟点的数字?

我尝试用空字符串sed替换所有数字后跟一个点(例如3., )的模式。因此我尝试:355.

sed 's/\d+\.//g' file.txt

但它不起作用。这是为什么呢?

答案1

因为 sed 不是 perl —— sed 正则表达式没有\d简写:

sed 's/[[:digit:]]\+\.//g'

sed 正则表达式文档这里

答案2

两个问题:

  1. sed不支持\d。使用[0-9][[:digit:]]

  2. +必须用反斜杠来表示特殊含义:\+

答案3

几年后,在添加其他答案时,我发现我想要更复杂的正则表达式的扩展功能

这只+需要一个或多个,并且通常使字符串对我的情况和这个情况都更加明显

# NOTE \d is not supported
sed --regexp-extended 's/[0-9]+\.//g'

-E -r --regexp-extended都一样

使用sed4.7

答案4

sed 手册页引用了 re_format 手册页。它做了 2 个区分:(1) 过时的正则表达式与扩展的正则表达式;(2) 非增强的正则表达式与增强的正则表达式。所有 4 种组合都是可能的。sed 支持过时的正则表达式和扩展的正则表达式,但无论哪种情况,都只支持非增强的正则表达式。\d 运算符是增强正则表达式的一个特性,因此 sed 不支持它。

相关内容