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-1620:33:00としてフォーマットするにはどうすればよいですか

次のコマンドを使用して、上記の文字列(2月16日)を取得しました。しかし、私はそれを元に戻す方法がわかりません。

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 に答える