Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改shell脚本中的日期格式_Shell_Date_Python 2.7_Sed_Awk - Fatal编程技术网

更改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逻辑是否正确,或者是否有更好的方法来执行相同的操作?