sed比赛日期格式2013年4月25日

时间:2013-04-25 21:45:47

标签: regex linux bash sed pattern-matching

任何人都可以帮助搜索&替换脚本(sed)以匹配2009年2月24日的日期并用空格替换它?

 sed 's/ \(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Aug\|Sep\|Oct\|Nov\|Dec\) [0-9][0-9], [2][0-9][0-9][0-9]$//g'

我在文件上尝试上述语法,但输出似乎不匹配!

2 个答案:

答案 0 :(得分:3)

您只需删除$(美元符号):

sed 's/ \(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Aug\|Sep\|Oct\|Nov\|Dec\) [0-9][0-9], [2][0-9][0-9][0-9]//g'

用你问题中的句子进行测试:

kent$  echo "to match a date Feb 24, 2009 and replace it with a white space?"|sed 's/ \(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Aug\|Sep\|Oct\|Nov\|Dec\) [0-9][0-9], [2][0-9][0-9][0-9]//g' 
to match a date and replace it with a white space?

答案 1 :(得分:1)

在我的Mac上,即使这个sed也不起作用:

sed 's/Feb\|Mar//g'

甚至不是这样:

sed 's/Feb|Mar//g'

然而,当我使用扩展的正则表达式开关-E时,事情开始像这样工作:

sed -E 's/ (Jan|Feb|Mar|Apr|May|Jun|Aug|Sep|Oct|Nov|Dec) [0-9][0-9], [2][0-9][0-9][0-9]//g'

在Linux上,您可以使用-r标志代替-E

sed -r 's/ (Jan|Feb|Mar|Apr|May|Jun|Aug|Sep|Oct|Nov|Dec) [0-9][0-9], [2][0-9][0-9][0-9]//g'