更改shell脚本中的日期格式

时间:2013-02-23 07:19:30

标签: shell date python-2.7 sed awk

我有一个字符串,我需要将国家/地区名称和日期分开。

# echo 'india16-Feb-2013-20-33.sql' |  sed 's/[0-9][0-9]//' | awk -F"-" '{print $1}'
india

# echo 'india16-Feb-2013-20-33.sql' |  sed 's/india//' | awk -F"." '{print $1}'
16-Feb-2013-20-33

1)上面的sed + awk是否正确?还有更好的办法吗?

2)如何将日期格式设为 2013-02-16 20:33:00

我使用以下命令获得了上面提到的字符串(16-Feb)。但我不知道如何改变它。

date '+%d-%b-%Y-%H-%M'

3 个答案:

答案 0 :(得分:3)

我无法获得sed dateosx版本,因此我使用了Python版本。

import datetime
import re
datestr = 'india16-Feb-2013-20-33.sql'

(country, date) = re.findall('(.*?)(\d{2}-.{3}-\d{4}-\d{2}-\d{2}).*', datestr)[0]

dt = datetime.datetime.strptime(date, "%d-%b-%Y-%H-%M")

print "country=", country
print "dt=", dt

给出:

country= india
dt= 2013-02-16 20:33:00

答案 1 :(得分:1)

我开始喜欢sed

$ cat a.txt
india16-Feb-2013-20-33.sql

$ sed 's/[0-9].*//' a.txt
india

$ sed 's/[a-z]*//; s/-/ /3; s/-/:/3; s/.sql//' a.txt | xargs -0 date '+%F %T' -d
2013-02-16 20:33:00

答案 2 :(得分:0)

使用sed和单个替换:

sed 's/.*\([0-9]\{2\}-[A-Z][a-z]\{2\}-[0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\).*/date -d "\1 \2\3" +"%F %T"/ge'

就我个人而言,我发现使用GNU sed

的眼睛更容易一些
sed -r 's/.*([0-9]{2}-[A-Z][a-z]{2}-[0-9]{4})-([0-9]{2})-([0-9]{2}).*/date -d "\1 \2\3" +"%F %T"/ge'

结果:

2013-02-16 20:33:00