1

我正在尝试使用 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

我做错了什么?

4

1 回答 1

3

几点:

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

  • 量词{n}是扩展正则表达式类的一部分,因此请使用该-r选项(或-E用于 的 BSD 衍生物sed)或再次转义扩展功能,如\{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
于 2013-03-05T15:19:02.017 回答