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


75

我正在尝试sed用数字替换所有模式,然后用一个点(例如3.355.)紧跟一个空字符串。所以我尝试:

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

但这是行不通的。这是为什么?


1
我发现这篇文章非常有用
Stphane

Answers:


110

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

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

在此处 sed正则表达式文档。


3
那就是您想要零个或多个数字。/[[:digit:]]*\. /将匹配字符串,foo.因为您允许使用零位数字。如果您想要一次或多次使用\+,如图所示
glenn jackman

71

两个问题:

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

  2. +必须加反斜杠以获取特殊含义:\+


6
而不是反斜杠+(例如,在Mac OS X上不起作用),可以使用-E选项interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).可悲地解决,这对\ d问题没有帮助...
gMale

4
@gmale:-E不适用于GNU sed,而是使用-r
choroba

12
好吧... sed关于便携性,它看起来确实很烂...
iconoclast 2014年

@choroba我想我今天很困惑。我要删除我的嘈杂评论...
史蒂文·卢

基本上,我想警告人们的是:如果您不使用扩展正则表达式(-E在BSD sed和-rGNU sed上),在BSD sed中,+\+(与相同?)都不起作用,而在GNU sed中,您可以让他们使用反斜杠。因此,通常的建议是在脚本中使用扩展的正则表达式
Steven Lu

3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.