替换包含sed分隔符和扩展正则表达式功能
我试图使用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类的
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}”
。这回答了你的问题吗?