Bash:
การแยกวันที่ออกจากสตริง
วิธีการ:
Bash เองมีความสามารถในการแยกวิเคราะห์วันที่โดยตรงที่จำกัด มักพึ่งพาเครื่องมือภายนอกเช่น date
และ awk
สำหรับการจัดการที่ซับซ้อนมากขึ้น นี่คือวิธีที่คุณสามารถแยกแบบฉบับที่เฉพาะเจาะจงแล้วใช้มันกับคำสั่ง date
เพื่อแปลงหรือดำเนินการ
ตัวอย่างที่ 1: สกัดสตริงวันที่และแปลงไปยังรูปแบบอื่น
สมมติว่าคุณมีวันที่ในรูปแบบ yyyy-mm-dd
และคุณต้องการแปลงให้เป็น dd-mm-yyyy
original_date="2023-04-01"
formatted_date=$(date -d $original_date '+%d-%m-%Y')
echo $formatted_date
ผลลัพธ์ตัวอย่าง:
01-04-2023
นี่ใช้คำสั่ง date
กับตัวเลือก -d
เพื่อระบุสตริงวันที่นำเข้า และ +%d-%m-%Y
เพื่อกำหนดรูปแบบการแสดงผล
ตัวอย่างที่ 2: ใช้ awk
เพื่อแยกวันที่จากบรรทัดของข้อความที่มีโครงสร้างและแปลงมัน
ถ้าสมมติว่าคุณมีบรรทัดของไฟล์บันทึก:
2023-04-01 12:00:00 User logged in
คุณสามารถสกัดและแปลงส่วนวันที่โดยใช้ awk
และ date
log_line="2023-04-01 12:00:00 User logged in"
date_part=$(echo $log_line | awk '{print $1}')
formatted_date=$(date -d $date_part "+%A, %B %d, %Y")
echo $formatted_date
ผลลัพธ์ตัวอย่าง:
Saturday, April 01, 2023
ตัวอย่างนี้ใช้ awk
ในการแยกบรรทัดบันทึกและสกัดส่วนวันที่ ($1
หมายถึงฟิลด์ที่เป็นพื้นที่แยกกันตัวแรก), แล้วจึงใช้ date
ในการจัดรูปแบบใหม่
การใช้เครื่องมือของบุคคลที่สาม
สำหรับการแยกวิเคราะห์ที่ซับซ้อนมากขึ้นหรือเมื่อต้องจัดการกับรูปแบบวันที่ที่หลากหลาย เครื่องมือของบุคคลที่สามเช่น dateutils
อาจมีประโยชน์มาก
ตัวอย่างกับ dateutils
:
สมมุติว่าคุณมีสตริงวันที่ในรูปแบบที่ไม่เป็นมาตรฐาน ตัวอย่างเช่น April 01, 2023
original_date="April 01, 2023"
formatted_date=$(dateconv -i "%B %d, %Y" -f "%Y-%m-%d" <<< $original_date)
echo $formatted_date
ผลลัพธ์ตัวอย่าง:
2023-04-01
คำสั่งนี้ใช้ dateconv
จาก dateutils
, โดยระบุรูปแบบนำเข้าด้วย -i
และรูปแบบผลลัพธ์ที่ต้องการด้วย -f
dateutils
รองรับช่วงกว้างของรูปแบบวันที่และเวลา ทำให้มีความยืดหยุ่นมากสำหรับงานแยกวิเคราะห์วันที่ในสคริปต์ Bash