替换包含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

中的任何内容

我做错了什么?

几点说明:

  • 您使用/作为sed的分隔符,但替换包含/,因此选择不同的分隔符,例如|或用转义替换中的/sed可以使用任何分隔符

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

  • g标志可能需要也可能不需要,这取决于您是否在单行上有多个匹配。这对你给出的例子没有影响,但值得指出。

  • 您可能需要{1,2}来表示日期和月份i。e 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

最新更新