ฉันมีปัญหาหนึ่งกับรูปแบบวันที่ของฉัน ฉันต้องการเปลี่ยนจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่งและกลับกัน รูปแบบวันที่ของฉันคือ
รูปแบบ 1
YYYY-MM-DD
รูปแบบ 2
MM/DD/YYYY
ฉันต้องการเปลี่ยนรูปแบบ 1 เป็นรูปแบบ 2 และจัดรูปแบบ 2 เป็นรูปแบบ 1
ฉันมีปัญหาหนึ่งกับรูปแบบวันที่ของฉัน ฉันต้องการเปลี่ยนจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่งและกลับกัน รูปแบบวันที่ของฉันคือ
รูปแบบ 1
YYYY-MM-DD
รูปแบบ 2
MM/DD/YYYY
ฉันต้องการเปลี่ยนรูปแบบ 1 เป็นรูปแบบ 2 และจัดรูปแบบ 2 เป็นรูปแบบ 1
คำตอบ:
ใช้ 'วันที่' ของ GNU สำหรับสิ่งนี้ มันจะแปลงระหว่างรูปแบบอื่น ๆ สำหรับคุณ (ดูdate --help
รายการรูปแบบ)
$ date -d 2013-07-05 +%m/%d/%Y
07/05/2013
$ date -d 07/05/2013 +%F
2013-07-05
สมมติว่าคุณมีวันที่ในรูปแบบข้อความที่จะต้องมีการแปลง
echo '2013-12-13' | awk -v FS=- -v OFS=/ '{print $2,$3,$1}'
และในทางกลับกัน
echo '12/13/2013' | awk -v FS=/ -v OFS=- '{print $3,$1,$2}'
date
วิธีการของ Drewbenn ซึ่งแน่นอนกว่านี้มากขึ้น
$ echo YYYY-MM-DD | { IFS=- read y m d && echo "$m/$d/$y"; }
MM/DD/YYYY
หากคุณมีไฟล์ที่มีจำนวนมากของวันที่หนึ่งต่อบรรทัด:
awk -F- -vOFS=/ '{print $2,$3,$1}' < that-file
ใช้ sed ดังนี้:
$ 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
ตอบคำถามที่ชี้แจงในความคิดเห็นเกี่ยวกับวิธีการเปลี่ยนรูปแบบวันที่ในชื่อไฟล์ให้ใช้ตัวแปรของgnu date
วิธีการของ Drewbenn คำสั่งนี้ค้นหาไฟล์ทั้งหมดในโฟลเดอร์โลคัลและไพพ์ชื่อไฟล์เท่านั้นเพื่อxargs
แทนที่date
ชื่อไฟล์ที่ถูกแก้ไขเป็นอาร์กิวเมนต์ที่สองmv
ซึ่งดำเนินการเปลี่ยนชื่อ
bash
จำเป็นต้องใช้การแทนค่าตัวแปรเพิ่มเติมแบบวนวงจรเล็กน้อยตามการbash
ประเมินdate
คำสั่ง
find ./ -printf '%f\n' | xargs -I '{}' sh -c 'mv $1 $(date -j -f %Y-%m-%d $1 +%m/%d%Y)' -- {} \;