รับส่วนสุดท้ายของสตริงหลังจากยัติภังค์


10

มีบรรทัดคำสั่งง่าย ๆ ในการแยกส่วนสุดท้ายของสตริงที่คั่นด้วยเครื่องหมายขีดคั่นหรือไม่ เช่นผมต้องการที่จะแยกจาก123foo-bar-123

คำตอบ:


23

คุณสามารถใช้การขยายพารามิเตอร์ของ Bash :

string="foo-bar-123" && printf "%s\n" "${string##*-}"
123

หากคุณต้องการใช้กระบวนการอื่นด้วย Awk:

echo "foo-bar-123" | awk -F- '{print $NF}'

หรือถ้าคุณชอบ Sed:

echo "foo-bar-123" | sed 's/.*-//'

กระบวนการภายนอกที่เบากว่าอย่างที่Glenn Jackman แนะนำคือcut:

cut -d- -f3 <<< "$string"

การขยายพารามิเตอร์ของเชลล์เป็นคำตอบที่ดีที่สุด เครื่องมือภายนอกที่มีน้ำหนักเบาเป็นcut:cut -d- -f3 <<< "$string"
เกล็น Jackman

1
@glennjackman - อีกครั้ง: cut; แน่นอน แต่ถ้าจำนวนของเขตข้อมูลสุดท้ายเป็นที่รู้จักกัน (เป็นคำถามที่ค่อนข้างคลุมเครือ: มีบรรทัดคำสั่งง่าย ๆ ในการแยกส่วนสุดท้าย ... ? )
don_crissti

2
@don_crissti แน่นอน หนึ่งสามารถทำrev <<< "$string" | cut -d- -f1 | revแต่แล้วเรากำลังหันเหออกไปจากความเรียบง่ายของ param.expansion
เกล็นแจ็คแมน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.