替换包含sed分隔符和扩展的正则表达式功能

时间:2013-03-05 15:11:53

标签: sed

我正在尝试使用sed匹配并使用somedate:"12/12/2012"

替换以下性质sed 's/somedate:"[0-9]{2}\/[0-9]{2}\/[0-9]{4}"//g'的字符串

此表达式与字符串something and somedate:"12/12/2012" and something else

中的任何内容都不匹配

我做错了什么?

1 个答案:

答案 0 :(得分:3)

几点:

  • 您使用/作为sed的分隔符,但替换包含/,因此请选择其他分隔符,例如|或转义/\代替。任何分隔符都可以与sed一起使用。

  • 量词{n}是扩展的正则表达式类的一部分,因此使用-r选项(或-E用于sed的BSD衍生物)或再次逃避扩展功能,如\{2\}

  • g标志可能需要也可能不需要,具体取决于您是否在一条线路上有多个匹配项。它对您的示例没有任何影响,但值得指出。

  • 您可能希望日期和月份为{1,2} 1/1/2012

我愿意:

$ sed -r 's|somedate:"[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}"||' file
something and  and something else

或者通过逃避一切:

$ sed 's/somedate:"[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{4\}"//' file
something and  and something else