1

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

# 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'
4

3 回答 3

3

我无法使用sedwithdate版本,osx所以我做了一个 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
于 2013-02-23T13:35:29.477 回答
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
于 2013-02-23T08:48:42.687 回答
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
于 2013-02-23T11:38:55.360 回答