मैं यह कहकर शुरू करूंगा कि मुझे लगता है कि यह समस्या थोड़ी कम निर्दोष है जितना लगता है।
मुझे क्या करने की आवश्यकता है: पाथ पर्यावरण चर के भीतर एक फ़ोल्डर की जांच करें। यह शुरुआत में या कहीं के बाद हो सकता है। मुझे बस यह सत्यापित करने की आवश्यकता है कि वह फ़ोल्डर वहां मौजूद है।
मेरी समस्या का उदाहरण - आइए उपयोग करते हैं /opt/gnome
।
SCENARIO 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
। इसलिए बृहदान्त्र।
SCENARIO 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
।