sed命令更改日期格式

时间:2015-10-26 20:14:22

标签: date unix sed format command

以下是我正在使用的文件的片段:

709ENVUN07,SET1,FE10,GB0009252882,GB,GBX,NULL,S,O,LO,1510.00000000,173,N,F,28022007,07:51:15,3717
208ATNHG07,SET1,FE10,GB0009252882,GB,GBX,NULL,S,O,LO,1550.00000000,1800,N,F,18012007,15:48:21,654681

正如您所看到的,日期采用以下格式:2802200718012007

使用sed我已成功更改为我希望的格式。

    gzip -dc allGlaxoOrderHistory.CSV.gz |sed 's/\([0-9]\{2\}\)\([0-9]\{2\}\)\(2[0-9]\{3\}\)/\1-\2-\3/g' > newOrderHistory.csv

然而,sed也将GB0009252882更改为GB00-09-252882,如下所示

709ENVUN07,SET1,FE10,GB00-09-252882,GB,GBX,NULL,S,O,LO,1510.00000000,173,N,F,28-02-2007,07:51:15,3717
208ATNHG07,SET1,FE10,GB00-09-252882,GB,GBX,NULL,S,O,LO,1550.00000000,1800,N,F,18-01-2007,15:48:21,654681

问题是如何更改2802200718012007更改为此28-02-200718-01-2007,而GB0009252882也不会更改。

1 个答案:

答案 0 :(得分:1)

[编辑]

您的日期字段是从开始的第15个字段。你可以像这样编写你的模式:

sed 's/\(\([^,]*,\)\{14\}..\)\(..\)/\1-\3-/'

,[^,]*,描述一个字段(带分隔符)。

您还可以使用awk更轻松地按字段工作。您只需将输入和输出分隔符设置为,

使用awk(Gnu),定位第15个字段:

awk -F, -vOFS=, '{$15=gensub(/(..)(..)(....)/, "\\1-\\2-\\3", "g", $15)}1' yourfile

参数-F,设置输入分隔符,-vOFS=,设置输出分隔符。最后的1用作print)的快捷方式。