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

ตัวอย่างการจัดการสตริงทุบตี – ความยาว สตริงย่อย ค้นหาและแทนที่

ใน bash shell เมื่อคุณใช้เครื่องหมายดอลลาร์ตามด้วยชื่อตัวแปร เชลล์จะขยายตัวแปรด้วยค่าของมัน คุณลักษณะของเชลล์นี้เรียกว่าการขยายพารามิเตอร์

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

บทความนี้เป็นส่วนหนึ่งของชุดการสอนทุบตีที่กำลังดำเนินอยู่ อ้างถึงบทความก่อนหน้าของเราเกี่ยวกับ bash { } ส่วนขยาย

1. ระบุความยาวของสตริงภายใน Bash Shell Script

${#string}

รูปแบบข้างต้นใช้เพื่อรับความยาวของตัวแปร bash ที่กำหนด

$ cat len.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${#var}

$ ./len.sh
24

หากต้องการทำความเข้าใจเพิ่มเติมเกี่ยวกับตัวแปร bash ให้อ่านตัวอย่าง Bash Global และ Local Variable 6 ตัวอย่าง

2. แยกสตริงย่อยจากตัวแปรภายใน Bash Shell Script

Bash มีวิธีแยกสตริงย่อยออกจากสตริง ตัวอย่างต่อไปนี้จะอธิบายวิธีแยกวิเคราะห์อักขระ n ตัวโดยเริ่มจากตำแหน่งใดตำแหน่งหนึ่ง

${string:position}

แยกสตริงย่อยจาก $string ที่ $position

${string:position:length}

แยกความยาว $ ของสตริงย่อยของอักขระจาก $string เริ่มต้นจากตำแหน่ง $ ในตัวอย่างด้านล่าง คำสั่ง echo แรกจะส่งคืนสตริงย่อยที่เริ่มต้นจากตำแหน่งที่ 15 คำสั่ง echo ที่สองส่งคืนอักขระ 4 ตัวโดยเริ่มจากตำแหน่งที่ 15 ความยาวต้องเป็นตัวเลขที่มากกว่าหรือเท่ากับศูนย์

$ cat substr.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${var:15}
echo ${var:15:4}

$ ./substr.sh
geekstuff
geek

โปรดดูบทความก่อนหน้าของเราเพื่อทำความเข้าใจเพิ่มเติมเกี่ยวกับ $*, $@, $#, $$, $!, $?, $-, $_ bash พารามิเตอร์พิเศษ

3. การจับคู่สตริงย่อยที่สั้นที่สุด

ไวยากรณ์ต่อไปนี้จะลบการจับคู่ที่สั้นที่สุดของ $substring จากด้านหน้าของ $string

${string#substring}

ไวยากรณ์ต่อไปนี้จะลบการจับคู่ที่สั้นที่สุดของ $substring จากด้านหลังของ $string

${string%substring}

ตัวอย่างเชลล์สคริปต์ต่อไปนี้จะอธิบายแนวคิดการจับคู่สตริงย่อยที่สั้นที่สุดสองข้อข้างต้น

$ cat shortest.sh
#! /bin/bash

filename="bash.string.txt"

echo ${filename#*.}
echo ${filename%.*}

$ ./shortest.sh
After deletion of shortest match from front: string.txt
After deletion of shortest match from back: bash.string

ในสตริงย่อยคำสั่ง echo แรก '*.' จะจับคู่อักขระและจุด และ # แถบจากด้านหน้าของสตริง ดังนั้นจึงตัดสตริงย่อย "bash" จากตัวแปรที่เรียกว่าชื่อไฟล์ ในสตริงย่อยคำสั่ง echo ที่สอง '.*' จะจับคู่สตริงย่อยที่ขึ้นต้นด้วย dot และแถบ % จากด้านหลังของสตริง ดังนั้นจึงลบสตริงย่อย '.txt'

4. การจับคู่สตริงย่อยที่ยาวที่สุด

ไวยากรณ์ต่อไปนี้จะลบการจับคู่ที่ยาวที่สุดของ $substring จากด้านหน้าของ $string

${string##substring}

ไวยากรณ์ต่อไปนี้จะลบการจับคู่ที่ยาวที่สุดของ $substring จากด้านหลังของ $string

${string%%substring}

ตัวอย่างเชลล์สคริปต์ต่อไปนี้จะอธิบายแนวคิดการจับคู่สตริงย่อยที่ยาวที่สุดสองข้อข้างต้น

$ cat longest.sh
#! /bin/bash

filename="bash.string.txt"

echo "After deletion of longest match from front:" ${filename##*.}
echo "After deletion of longest match from back:" ${filename%%.*}

$ ./longest.sh
After deletion of longest match from front: txt
After deletion of longest match from back: bash

ในตัวอย่างข้างต้น ##* ตัดการจับคู่ที่ยาวที่สุดสำหรับ '*.' ซึ่งตรงกับ "bash.string" ดังนั้นหลังจากสไทรพ์สิ่งนี้ มันจะพิมพ์ txt ที่เหลือ และ %%.* จะตัดการจับคู่ที่ยาวที่สุดสำหรับ .* จากด้านหลังซึ่งตรงกับ “.string.txt” หลังจากสตริปแล้ว ผลลัพธ์ที่ได้จะกลับเป็น “bash”

5. ค้นหาและแทนที่ค่าสตริงภายใน Bash Shell Script

แทนที่เฉพาะนัดแรก

${string/pattern/replacement}

โดยจะจับคู่รูปแบบในตัวแปร $string และแทนที่เฉพาะการจับคู่แรกของรูปแบบด้วยการแทนที่

$ cat firstmatch.sh
#! /bin/bash

filename="bash.string.txt"

echo "After Replacement:" ${filename/str*./operations.}

$ ./firstmatch.sh
After Replacement: bash.operations.txt

แทนที่การแข่งขันทั้งหมด

${string//pattern/replacement}

มันแทนที่การจับคู่ของรูปแบบทั้งหมดด้วยการแทนที่

$ cat allmatch.sh
#! /bin/bash

filename="Path of the bash is /bin/bash"

echo "After Replacement:" ${filename//bash/sh}

$ ./allmatch.sh
After Replacement: Path of the sh is /bin/sh

เกี่ยวกับการค้นหาและแทนที่ อ้างถึงบทความก่อนหน้าของเรา – ตัวอย่างการแทนที่ และ Vim ค้นหาและแทนที่

เปลี่ยนจุดเริ่มต้นและจุดสิ้นสุด

${string/#pattern/replacement}

ไวยากรณ์ต่อไปนี้จะแทนที่ด้วยสตริงการแทนที่ เฉพาะเมื่อรูปแบบตรงกับจุดเริ่มต้นของ $string

${string/%pattern/replacement}

ไวยากรณ์ต่อไปนี้จะแทนที่ด้วยสตริงการแทนที่ เฉพาะเมื่อรูปแบบตรงกันที่ส่วนท้ายของ $string ที่กำหนด

$ cat posmatch.sh
#! /bin/bash

filename="/root/admin/monitoring/process.sh"

echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
echo "Replaced at the end": ${filename/%.*/.ksh}

$ ./posmatch.sh
Replaced at the beginning: /tmp/admin/monitoring/process.sh
Replaced at the end: /root/admin/monitoring/process.ksh

แนะนำให้อ่าน

ตัวอย่างการจัดการสตริงทุบตี – ความยาว สตริงย่อย ค้นหาและแทนที่Bash 101 Hacks โดย Ramesh Natarajan . ฉันใช้เวลาส่วนใหญ่กับสภาพแวดล้อม Linux โดยธรรมชาติแล้วฉันเป็นแฟนตัวยงของ Bash command line และ shell scripting 15 ปีที่แล้ว ตอนที่ฉันทำงานกับ *nix รสชาติต่างๆ ฉันเคยเขียนโค้ดจำนวนมากบน C shell และ Korn shell หลายปีต่อมา เมื่อฉันเริ่มทำงานบน Linux ในฐานะผู้ดูแลระบบ ฉันทำได้ค่อนข้างอัตโนมัติทุกงานที่เป็นไปได้โดยใช้ Bash shell scripting จากประสบการณ์ Bash ของฉัน ฉันได้เขียน Bash 101 Hacks eBook ที่มีตัวอย่างเชิงปฏิบัติ 101 ตัวอย่างทั้งบรรทัดคำสั่ง Bash และเชลล์สคริปต์ หากคุณกำลังคิดเกี่ยวกับการควบคุม Bash ให้เชี่ยวชาญ ลองอ่านหนังสือเล่มนี้ดู ซึ่งจะช่วยให้คุณควบคุมบรรทัดคำสั่งและเชลล์สคริปต์ของ Bash ได้