我正在尝试使用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,...
答案 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