如何匹配日期mm / dd / yyyy

时间:2012-06-05 19:24:35

标签: sed

给出以下输入

506028500,1820196768,43,0,84552257, ,1,-71.16,42.42,04/26/2012,

我想过滤行尾的日期,所以我可以将其mm / dd / yyyy格式更改为MySQL日期格式yyyy-mm-dd:

我试图匹配首先删除尾随','(逗号)的行末尾的日期。

{
    s/,$//g
    /\([0-9][0-9]\)\/\([0-9][0-9]\)\/\([0-9][0-9][0-9][0-9]\)$/=
}

我得到12847,但我期待04262012.

我做错了什么,我甚至无法匹配那里的日期?

感谢。

2 个答案:

答案 0 :(得分:3)

这可能对您有用:

echo "506028500,1820196768,43,0,84552257, ,1,-71.16,42.42,04/26/2012," | 
sed 's|,\(..\)/\(..\)/\(....\),$|,\3-\2-\1,|'
506028500,1820196768,43,0,84552257, ,1,-71.16,42.42,2012-26-04,

如果您只想要日期:

echo "506028500,1820196768,43,0,84552257, ,1,-71.16,42.42,04/26/2012," | 
sed 's|.*,\(..\)/\(..\)/\(....\),$|\3-\2-\1|'
2012-26-04

答案 1 :(得分:2)

这对我有用:

sed "s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/g" someFile.txt

至少用一种所需格式替换日期字符串。

要仅在结尾处打印日期,以下内容适用于我:

sed "s/.*\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/g" someFile.txt