我试图使用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。e1/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