Nasıl bir tarih biçiminden diğer biçime dönüştürmek için?


11

Tarih biçimimle ilgili bir sorunum var. Bir biçimden diğerine değiştirmek istiyorum, ya da tam tersi. Tarih formatlarım

Biçim 1

YYYY-MM-DD

Biçim 2

MM/DD/YYYY

Biçim 1'i biçim 2'ye ve biçim 2'yi biçim 1'e değiştirmek istiyorum.


o daha açık, dosya dosyası var 1 adı: tarih 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Gerekli çıktı 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 ve tam tersi
AiB

İleri eğik çizgiler, * nix dosya
adında bulunmayan

Yanıtlar:


14

Bunun için GNU 'tarihi' kullanın. Ayrıca, sizin için diğer biçimler arasında da dönüşür date --help(biçimlerin listesine bakın ).

$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05

daha açık olmak gerekirse, ben dosya dosyası var1 adı: tarih 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Gerekli çıktı 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 ve tam tersi
AiB

1
@Abraham bu gereksinimi nasıl karşılamıyor?
jordanm

6

Metin biçiminde dönüştürülmesi gereken tarihleriniz olduğunu varsayarsak

echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'

Ve tam tersi

echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'

daha açık olmak gerekirse, ben dosya dosyası var1 adı: tarih 2000-01-01 2000-01-02 2000-01-03 2000-01-04 .. Gerekli çıktı 01 / 01.2000 01/02/2000 01/03 / 2000 01/02/2000 ve tam tersi
AiB

Teşekkür ederim 1_CR, Biraz değiştirdikten sonra şimdi çalışıyor !! #! / bin / bash echo '$ 1- $ 2- $ 3' | awk -v FS = - -v OFS = / '{print $ 2, 3 $, 1 $}' data.file
AiB

@Abraham, şansınızı drewbenn'in dateyaklaşımı ile denemelisiniz , bu kesinlikle daha zarif
iruvar

3
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY

Bu tarihlerin çoğuna sahip bir dosyanız varsa, her satıra bir tane gelecek şekilde:

awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file

0

Sed'i aşağıdaki gibi kullanarak:

$ echo '2013-12-13' | sed -r 's/([[:digit:]]{2,4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})/\2\/\3\/\1/g'
12/13/2013
$ echo '12/13/2013' | sed -r 's/([[:digit:]]{1,2})\/([[:digit:]]{1,2})\/([[:digit:]]{2,4})/\3-\1-\2/g'
2013-12-13

0

Bir dosya adındaki tarih biçiminin nasıl değiştirileceği hakkındaki yorumlarda netleştirilmiş soruyu cevaplarken, drewbenn'in gnu dateyaklaşımının bir varyantını kullanın . Bu komut, yerel klasördeki tüm dosyaları bulur xargsve datedeğiştirilen dosya mvadını yeniden adlandırma işlemini gerçekleştiren ikinci bağımsız değişken olarak değiştirerek yalnızca dosya adını kullanır .

Komutu değerlendirirken bashdeğişken ikamenin ek, hafifçe dolaşımda kullanılması gerekir .bashdate

find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1  $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.