ฉันจะเริ่มต้นด้วยการบอกว่าฉันคิดว่าปัญหานี้เป็นผู้บริสุทธิ์น้อยกว่าเล็กน้อยฟังดู
สิ่งที่ฉันต้องทำ: ตรวจสอบโฟลเดอร์ภายในตัวแปรสภาพแวดล้อม PATH อาจเป็นตอนเริ่มต้นหรือหลังจากนั้น ฉันแค่ต้องยืนยันว่าโฟลเดอร์นั้นอยู่ที่นั่น
ตัวอย่างปัญหาของฉัน - มาใช้/opt/gnome
กัน
สถานการณ์ที่ 1: โฟลเดอร์ไม่ได้อยู่ที่ตำแหน่งเริ่มต้นของ PATH
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
โปรดทราบว่าความต้องการ grep /var/opt/gnome
จะเฉพาะเจาะจงมากพอเพื่อที่จะไม่จับ ดังนั้นลำไส้ใหญ่
สถานการณ์ที่ 2: โฟลเดอร์อยู่ที่จุดเริ่มต้นของ PATH
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
นี่คือปัญหาของฉัน - ฉันต้องค้นหาโคลอนหรือเริ่มต้นของบรรทัดด้วยโฟลเดอร์นี้ สิ่งที่ฉันต้องการทำคือหนึ่งในสองนิพจน์วงเล็บเหลี่ยม:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
แต่[^
และ[:
มีความหมายของตัวเอง ดังนั้นทั้งสองคำสั่งข้างต้นจึงไม่ทำงาน
มีวิธีที่ฉันสามารถ grep สำหรับสองสถานการณ์ในหนึ่งคำสั่ง?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
หรือ/opt/gnome$
คุณจะพบหรือ/opt/gnome-foo
/opt/gnome/bar