sed使数字可选

时间:2014-09-15 03:49:03

标签: regex sed

我正在尝试使用sed替换格式为08/09/2014的日期,但同时也使用格式8/9/14。我知道+符号应该匹配一个或多个匹配项,并且? 0或更多。我已经尝试了两个,但没有一个日期被“测试”取代。我原以为这会找到一个或多个数字后跟一个斜线,一个或多个数字后面跟一个斜线,4位数。

我是否需要逃避特殊角色,或者这里有什么问题?

sed -f mySed.sed dates.csv

# mySed.sed file
s#[0-9]+/[0-9]+/[0-9][0-9][0-9][0-9]#testing#g

# sample line in dates.csv
...,20/01/2001,2/1/2009,...

2 个答案:

答案 0 :(得分:2)

你犯了几个错误。这是一个有效的例子:

echo '20/01/2001,2/1/2009' | sed 's~[0-9]\{1,2\}/[0-9]\{1,2\}/\([0-9]\{2\}\)\{1,2\}~toto~g'

请注意,?表示"可选" (换句话说,0或1次),必须转义。

更准确地说,我选择使用此量词{m,n}而不是+。但如果您使用+请勿忘记将其\+转义,否则将被视为文字字符。

答案 1 :(得分:1)

您需要转义正则表达式中的+量词,并且可以使用最后一组的范围。

s#[0-9]\+/[0-9]\+/[0-9]\{2,4\}#testing#g

或者您可以在整个模式中使用范围量词。

s#[0-9]\{1,2\}/[0-9]\{1,2\}/[0-9]\{2,4\}#testing#g