บทความนี้จะแสดงวิธีแยกสตริงที่ตัวคั่นที่กำหนดในสคริปต์ Bash/Shell พร้อมตัวอย่าง
การแยกสตริงเป็นฟังก์ชันที่มีประโยชน์เมื่อเขียนสคริปต์ CSV (Comma Separated Values) เป็นรูปแบบที่พบบ่อยสำหรับข้อมูลออนไลน์ โดยฟิลด์ข้อมูลในตารางจะถูกคั่นด้วยเครื่องหมายจุลภาค (,)
คุณอาจต้องการแยกประโยคเป็นคำที่ช่องว่าง หรือแยกย่อหน้าเป็นประโยคที่จุด และอื่นๆ
หลายวิธีการเน้นที่วิธีการเฉพาะของ Bash ในการแยกสตริง ด้านล่างจะเป็นการ रूपรายวิธีที่ควรทำงานในสคริปต์ Shell Linux ใดๆ
การใช้คำสั่ง cut เพื่อแยกสตริง
คำสั่ง cut ใน Linux นำส่วนต่างๆ ออกจากบรรทัดในไฟล์ข้อความและแสดงผลออกมา
ตัวอย่างนี้จะปรับคำสั่งนี้เพื่อแยกข้อความที่ตัวคั่นที่กำหนด
สำหรับคู่มือผู้ใช้เต็มรูปแบบของคำสั่ง cut คลิกที่นี่
โค้ด
ด้านล่างเป็นสคริปต์ Bash ตัวอย่างที่รับสตริง splitMe และคืนค่าไอเท็มตามตำแหน่งในสตริงที่แยกด้วยจุลภาค (,):
#!/bin/bash # กำหนดสตริงที่คั่นด้วยจุลภาค splitMe='apple,banana,grape,kiwi' # รับไอเท็มแรกในสตริงที่แยก firstItem="$(echo $splitMe | cut -d',' -f1)" # รับไอเท็มที่สามในสตริงที่แยก thirdItem="$(echo $splitMe | cut -d',' -f3)" # ยืนยันผลลัพธ์โดยแสดงบนหน้าจอ echo $thirdItem
ทำไมจึงทำงานได้? คำสั่ง echo ใช้ส่งสตริงต้นฉบับไปยังคำสั่ง cut คำสั่ง cut ใช้ตัวเลือก -d เพื่อระบุตัวคั่น (ในกรณีนี้คือจุลภาค แต่สามารถใช้ตัวอักษรหรือสตริงใดๆ ได้) และตัวเลือก -f ตามด้วยตัวเลขเพื่อระบุฟิลด์ที่ควรคืนค่า – นั่นคือตำแหน่งของไอเท็มที่คุณต้องการจากสตริงที่แยก
ฟังก์ชัน Bash ที่นำกลับมาใช้ใหม่ได้
นั่นดีแล้ว แต่มันไม่ได้สามารถนำกลับมาใช้ใหม่ได้จริงๆ – ดังนี้คือในรูปแบบฟังก์ชัน:
#!/bin/bash # กำหนดฟังก์ชันเพื่อแยกสตริง # จะรับสามพารามิเตอร์: สตริงที่จะแยก, ตัวคั่น, และตำแหน่งของไอเท็มที่จะคืนค่า splitMyString(){ splitString=$1 delimiter=$2 item=$3 result="$(echo $splitString | cut -d',' -f$item)" echo $result } # กำหนดสตริงเพื่อทดสอบ splitMe='apple,banana,grape,kiwi' # ทดสอบฟังก์ชันโดยแยกสตริงที่จุลภาคและคืนค่าไอเท็มที่สอง echo $(splitMyString $splitMe "," 2)