我有一个字符串,我需要将国家/地区名称和日期分开。
# 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'
答案 0 :(得分:3)
我无法获得sed
date
个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
答案 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