ตัวอย่าง Bash Split String

Bash Split String Examples



เราจำเป็นต้องแยกข้อมูลสตริงเพื่อวัตถุประสงค์ต่างๆ ในการเขียนโปรแกรม ภาษาโปรแกรมหลายภาษามีฟังก์ชันในตัวชื่อ 'แยก' สำหรับแบ่งข้อมูลสตริงออกเป็นหลายส่วน แต่ไม่มีฟังก์ชันในตัวใน bash สำหรับการแบ่งสตริง โดยปกติ ตัวคั่นเดี่ยวหรือหลายตัวจะใช้เพื่อแยกข้อมูลสตริงใดๆ วิธีแยกสตริงเป็น bash จะแสดงในบทช่วยสอนนี้โดยใช้ตัวอย่างต่างๆ








การใช้ตัวแปร $IFS

ตัวแปรเชลล์พิเศษ $IFS ใช้ในการทุบตีเพื่อแยกสตริงออกเป็นคำ ตัวแปร $IFS เรียกว่า Internal Field Separator (IFS) ที่ใช้ในการกำหนดตัวคั่นเฉพาะสำหรับการแบ่งสตริง ขอบเขตของคำถูกระบุใน bash โดย $IFS ช่องว่างคือค่าตัวคั่นเริ่มต้นสำหรับตัวแปรนี้ ค่าอื่นๆ เช่น ' ', ' ', '-' เป็นต้น สามารถใช้เป็นตัวคั่นได้ หลังจากกำหนดค่าให้กับตัวแปร $IFS แล้ว ค่าสตริงสามารถอ่านได้สองตัวเลือก เหล่านี้คือ '-r' และ '-a' ตัวเลือก '-r' ใช้เพื่ออ่านแบ็กสแลช () เป็นอักขระแทนที่จะเป็นอักขระหลีก และตัวเลือก '-a' ใช้เพื่อเก็บคำที่แยกเป็นรายการลงในตัวแปรอาร์เรย์ สตริงสามารถแยกได้โดยไม่ต้องใช้ตัวแปร $IFS ใน bash วิธีต่างๆ ในการแยกข้อมูลสตริง (ด้วย $IFS หรือไม่มี $IFS) จะแสดงในตัวอย่างต่อไปนี้



ตัวอย่างที่ 1: แยกสตริงตาม

ค่าสตริงจะถูกหารด้วยช่องว่างโดยค่าเริ่มต้น สร้างไฟล์ชื่อ 'split1.sh' และเพิ่มรหัสต่อไปนี้ ในที่นี้ ตัวแปร $text ใช้เพื่อกำหนดค่าสตริง ตัวแปรเชลล์ $IFS ใช้เพื่อกำหนดอักขระที่จะใช้สำหรับการแบ่งข้อมูลสตริง Space ใช้ในสคริปต์นี้เป็นตัวคั่น ตัวเลือก '-a' ใช้กับคำสั่งอ่านเพื่อเก็บข้อมูลแบบแยกส่วนลงในตัวแปรอาร์เรย์ชื่อ $strarr 'for' loop ใช้เพื่ออ่านแต่ละองค์ประกอบของอาร์เรย์ $strarr



split1.sh





#!/bin/bash

#กำหนดค่าสตริง
ข้อความ='ยินดีต้อนรับสู่ LinuxHint'

# กำหนดพื้นที่เป็นตัวคั่น
ไอเอฟเอส=''

#อ่านคำที่แยกออกเป็นอาร์เรย์ตามตัวคั่นช่องว่าง
อ่าน -ถึงstrarr<<< '$text'

#นับจำนวนคำทั้งหมด
โยนออก 'มี${#strarr[*]}คำในข้อความ.'

# พิมพ์แต่ละค่าของอาร์เรย์โดยใช้ลูป
สำหรับชั่วโมงใน '${strarr[@]}';
ทำ
printf '$ ชั่วโมงNS'
เสร็จแล้ว

เอาท์พุท:

เรียกใช้สคริปต์



$ทุบตีsplit1.sh

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันสคริปต์

ตัวอย่างที่ 2: แยกสตริงตามอักขระเฉพาะ

อักขระเฉพาะใดๆ สามารถใช้เป็นตัวคั่นเพื่อหารค่าสตริงได้ สร้างไฟล์ชื่อ split2.sh และเพิ่มรหัสต่อไปนี้ ในที่นี้ ชื่อหนังสือ ชื่อผู้แต่ง และมูลค่าราคาจะใช้โดยการเพิ่มเครื่องหมายจุลภาค (,) เป็นสตริงอินพุต ถัดไป ค่าสตริงจะถูกแยกและเก็บไว้ในอาร์เรย์โดยยึดตามค่าของตัวแปรเชลล์ $IFS แต่ละค่าขององค์ประกอบอาร์เรย์จะถูกพิมพ์โดยค่าดัชนี

split2.sh

#!/bin/bash

#อ่านค่าสตริง
โยนออก 'ป้อนชื่อหนังสือ ชื่อผู้แต่ง และราคาโดยคั่นด้วยเครื่องหมายจุลภาค '
อ่านข้อความ

# ตั้งจุลภาคเป็นตัวคั่น
ไอเอฟเอส=','

#อ่านคำที่แยกออกเป็นอาร์เรย์ตามตัวคั่นจุลภาค
อ่าน -ถึงstrarr<<< '$text'

#พิมพ์คำที่แยกออกมา
โยนออก 'ชื่อหนังสือ :${strarr[0] }'
โยนออก 'ชื่อผู้แต่ง :${strarr[1]}'
โยนออก 'ราคา :${strarr[2]}'

เอาท์พุท:

เรียกใช้สคริปต์

$ทุบตีsplit2.sh

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันสคริปต์

ตัวอย่างที่ 3: แยกสตริงโดยไม่มีตัวแปร $IFS

ตัวอย่างนี้แสดงให้เห็นว่าสามารถแบ่งค่าสตริงได้อย่างไรโดยไม่ต้องใช้ $IFS ใน bash สร้างไฟล์ชื่อ ' split3.sh ' และเพิ่มรหัสต่อไปนี้ ตามสคริปต์ ค่าข้อความที่มีเครื่องหมายทวิภาค (:) ต้องใช้เป็นอินพุตสำหรับการแยก ที่นี่คำสั่ง 'readarray' พร้อมตัวเลือก -d ใช้เพื่อแยกข้อมูลสตริง ตัวเลือก '-d' ใช้เพื่อกำหนดอักขระตัวคั่นในคำสั่งเช่น $IFS ถัดไป ใช้ลูป 'for' เพื่อพิมพ์องค์ประกอบอาร์เรย์

split3.sh

#!/bin/bash

#อ่านสตริงหลัก
โยนออก 'ป้อนสตริงด้วยโคลอน (:) เพื่อแยก'
อ่านเมนสตรอง

#แยกสตริงตามตัวคั่น ':'
readarray-NS:-NSstrarr<<< '$mainstr'
printf 'NS'

# พิมพ์แต่ละค่าของอาร์เรย์โดยใช้ loop
สำหรับ (( NS=0; NS< ${#strarr[*]}; n++))
ทำ
โยนออก '${strarr[n]}'
เสร็จแล้ว

เอาท์พุท:

เรียกใช้สคริปต์

$ทุบตีsplit3.sh

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันสคริปต์

ตัวอย่างที่ 4: แยกสตริงด้วยตัวคั่นหลายอักขระ

ค่าสตริงจะถูกแบ่งโดยตัวคั่นอักขระตัวเดียวในตัวอย่างก่อนหน้านี้ทั้งหมด วิธีที่คุณสามารถแยกสตริงโดยใช้ตัวคั่นหลายอักขระได้แสดงไว้ในตัวอย่างนี้ สร้างไฟล์ชื่อ เวลา split4.sh และเพิ่มรหัสต่อไปนี้ ในที่นี้ ตัวแปร $text ใช้เพื่อเก็บข้อมูลสตริง ตัวแปร $delimiter ใช้เพื่อกำหนดข้อมูลแบบหลายอักขระที่ใช้เป็นตัวคั่นในคำสั่งถัดไป ตัวแปร $myarray ใช้เพื่อเก็บข้อมูลแบบแยกส่วนเป็นองค์ประกอบอาร์เรย์ สุดท้าย ข้อมูลแบบแยกส่วนทั้งหมดจะถูกพิมพ์โดยใช้ลูป 'for'

split4.sh

#!/bin/bash

#กำหนดสตริงที่จะแยก
ข้อความ='learnHTMLlearnPHPlearnMySQLlearnJavascript'

#กำหนดตัวคั่นหลายอักขระ
ตัวคั่น='เรียนรู้'
#เชื่อมตัวคั่นด้วยสตริงหลัก
สตริง=$textตัวคั่น $

#แยกข้อความตามตัวคั่น
myarray=()
ในขณะที่ [[ $string ]];ทำ
myarray+=( '${สตริง%%'$ตัวคั่น'*}' )
สตริง=${string#*'$delimiter'}
เสร็จแล้ว

#พิมพ์คำหลังรอยแยก
สำหรับค่าใน ${myarray[@]}
ทำ
โยนออก -NS '$value'
เสร็จแล้ว
printf 'NS'

เอาท์พุท:

เรียกใช้สคริปต์

$ทุบตีsplit4.sh

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันสคริปต์

บทสรุป:

ข้อมูลสตริงจำเป็นต้องแยกเพื่อวัตถุประสงค์ในการเขียนโปรแกรมที่แตกต่างกัน วิธีต่างๆ ในการแยกข้อมูลสตริงใน bash จะแสดงในบทช่วยสอนนี้ หวังว่า หลังจากฝึกตัวอย่างข้างต้นแล้ว ผู้อ่านจะสามารถแยกข้อมูลสตริงตามความต้องการได้

ดูข้อมูลเพิ่มเติม วีดีโอ !