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

替换包含sed分隔符和扩展正则表达式功能,sed,Sed,我试图使用sed来匹配和替换以下性质的字符串somedate:“12/12/2012”使用sed的/somedate:[0-9]{2}\/[0-9]{2}\/[0-9]{4}//g' 此表达式与字符串something和sometdate:“12/12/2012”和其他内容中的任何内容都不匹配 我做错了什么?有几点: 您使用/作为sed的分隔符,但替换包含/,因此请选择一个不同的分隔符,例如|,或在替换中用\转义//code>。任何分隔符都可以与sed一起使用 量词{n}是扩展regexp类的

我试图使用sed来匹配和替换以下性质的字符串
somedate:“12/12/2012”
使用
sed的/somedate:[0-9]{2}\/[0-9]{2}\/[0-9]{4}//g'

此表达式与字符串
something和sometdate:“12/12/2012”和其他内容中的任何内容都不匹配

我做错了什么?

有几点:

  • 您使用
    /
    作为
    sed
    的分隔符,但替换包含
    /
    ,因此请选择一个不同的分隔符,例如
    |
    ,或在替换中用
    \
    转义
    //code>。任何分隔符都可以与
    sed
    一起使用

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

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

  • 您可能希望在日期和月份使用
    {1,2}
    ,即
    1/1/2012

我会:

$sed-r的| somedate:“[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}”文件
有些别的
或者通过逃避一切:

$sed的/somedate:“[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{4\}”//”文件
有些别的

我不知道可以在sed中使用任何分隔符,所以感谢您的指针。但是,这两个表达式都与示例字符串中的“somedate:”不匹配。@cer|u albastru实际上它们都看到您一定在做一些不同的事情。我使用的是cygwin,下面是我尝试的:echo“something and sometate:“10/3/2011”和另一个日期:“1/31/2012”和(一个或两个)| sed-r's | sometate:[0-9]{2}/[0-9]{4}”||“--有什么想法吗?哈哈,看看测试字符串中的日期它只有一个数字,而不是两个
:]
你想要
sed-r的| somedate:[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}”
。这回答了你的问题吗?