更改shell脚本中的日期格式
我有一个字符串,需要将国家名称和日期分开更改shell脚本中的日期格式,shell,date,python-2.7,sed,awk,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) 如何将日期格式化为
# 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
我使用以下命令获得了上面提到的字符串(2月16日)。但我不知道如何把它改回来
date '+%d-%b-%Y-%H-%M'
我开始喜欢上sed了
$cat a.txt
india16-Feb-2013-20-33.sql
$sed's/[0-9].*/'a.txt
印度
$sed's/[a-z]*/;s/-//3;s/-/:/3;s/.sql/'a.txt | xargs-0日期'+%F%T'-d
2013-02-16 20:33:00
我开始喜欢上了sed
$cat a.txt
india16-Feb-2013-20-33.sql
$sed's/[0-9].*/'a.txt
印度
$sed's/[a-z]*/;s/-//3;s/-/:/3;s/.sql/'a.txt | xargs-0日期'+%F%T'-d
2013-02-16 20:33:00
使用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
使用
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
我无法在
osx
上使用date
版本获得sed
,因此我使用了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
我无法在
osx
上使用date
版本获得sed
,因此我使用了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
在一些情况下,国家名称以数字结尾。例如,india2在这种情况下,日期应选择为2位数字+“-”有时国家名称以数字结尾。例如india2在这种情况下,日期应选择为2位+“-”您使用的是现代linux系统,还是旧的Unixen(Sun、HP、AIX等)?注意,标签日期只有89个追随者,所以考虑交换标签为OS标签。在新的基于GNU的linux中,这可以在1 awk cmd中完成(调用gnudate进行转换)。祝你好运。你使用的是现代的linux系统,还是老式的Unixen(Sun、HP、AIX等)?注意,标签日期只有89个追随者,所以考虑交换标签为OS标签。在新的基于GNU的linux中,这可以在1 awk cmd中完成(调用gnudate进行转换)。祝你好运请检查所使用的if-else逻辑是否正确,或者是否有更好的方法来执行相同的操作请检查所使用的if-else逻辑是否正确,或者是否有更好的方法来执行相同的操作?