Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

วิธีแยกสตริงใน Bash/Shell Scripts พร้อมตัวอย่าง

บทความนี้จะแสดงวิธีแยกสตริงที่ตัวคั่นที่กำหนดในสคริปต์ Bash/Shell และแสดงตัวอย่าง

การแยกสตริงเป็นฟังก์ชันที่มีประโยชน์เมื่อสร้างสคริปต์ของคุณ CSV (Comma Separated Values) เป็นรูปแบบทั่วไปที่ทำให้ข้อมูลพร้อมใช้งานออนไลน์ โดยที่ช่องข้อมูลในตารางจะถูกคั่นด้วยเครื่องหมายจุลภาค (แปลกใจ)

คุณอาจแค่ต้องการแบ่งประโยคออกเป็นคำในช่องว่าง หรือแบ่งย่อหน้าเป็นประโยคในช่วงเวลานั้น เป็นต้น

โซลูชันจำนวนมากมุ่งเน้นไปที่วิธีการแยกสตริงเฉพาะของ Bash ด้านล่างนี้ ฉันจะสรุปวิธีการที่ควรจะใช้ได้กับเชลล์สคริปต์ของ Linux

การใช้ การตัด คำสั่งแยกสตริง

ที่ ตัด คำสั่งใน Linux ลบส่วนต่างๆ ออกจากบรรทัดในไฟล์ข้อความแล้วส่งออก

ตัวอย่างนี้จะปรับคำสั่งนี้เพื่อแยกข้อความที่ตัวคั่นที่กำหนด

สำหรับคู่มือผู้ใช้ฉบับเต็มของ cut คำสั่งคลิกที่นี่

เดอะโค้ด

ด้านล่างนี้เป็นตัวอย่างสคริปต์ทุบตีที่ใช้สตริง splitMe และส่งกลับรายการตามตำแหน่งในการแยกสตริงที่เครื่องหมายจุลภาค (, ):

#!/bin/bash

# Define a comma-separated string
splitMe='apple,banana,grape,kiwi'

# Get the first item in the split string
firstItem="$(echo $splitMe | cut -d',' -f1)"

# Get the third item in the split string
thirdItem="$(echo $splitMe | cut -d',' -f3)"

# Confirm the result by outputting it to screen
echo $thirdItem

เหตุใดจึงใช้งานได้ เสียงสะท้อน คำสั่งใช้เพื่อไปป์สตริงเดิมไปยัง ตัด สั่งการ. ที่ ตัด คำสั่งใช้ -d ตัวเลือกเพื่อระบุตัวคั่น (ในกรณีนี้คือเครื่องหมายจุลภาค แต่สามารถใช้อักขระหรือสตริงใดก็ได้ ) และ -f ตัวเลือกตามด้วยตัวเลขเพื่อระบุฟิลด์ที่จะส่งคืน นั่นคือตำแหน่งของรายการที่คุณต้องการรับจากสตริงแยก

ฟังก์ชันทุบตีแบบใช้ซ้ำได้

ทั้งหมดนั้นดีและดี แต่ไม่สามารถใช้ซ้ำได้ ดังนั้นนี่คือฟังก์ชัน:

#!/bin/bash

# Define function to split strings
# It will accept three parameters, the string to split, the delimiter, and finally the position of the item to return
splitMyString(){
    splitString=$1
    delimiter=$2
    item=$3
    result="$(echo $splitString | cut -d',' -f$item)"
    echo $result
}

# Define a string to split for testing
splitMe='apple,banana,grape,kiwi'

# Test the function by splitting the string at the comma and returning the second item
echo $(splitMyString $splitMe "," 2)
ที่สอง