Ich beginne damit, dass ich denke, dass dieses Problem etwas weniger unschuldig ist, als es sich anhört.
Was ich tun muss: Suchen Sie nach einem Ordner in der Umgebungsvariablen PATH. Es könnte am Anfang oder irgendwo danach sein. Ich muss nur überprüfen, ob dieser Ordner vorhanden ist.
Beispiel für mein Problem - verwenden wir /opt/gnome
.
SZENARIO 1: Ordner befindet sich nicht am Anfang von PATH
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Beachten Sie, dass der grep spezifisch genug sein muss, damit er nicht abfängt /var/opt/gnome
. Daher der Doppelpunkt.
SZENARIO 2: Ordner befindet sich am Anfang von PATH.
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
Dies ist mein Problem - ich muss mit diesem Ordner nach einem Doppelpunkt oder einem Zeilenanfang suchen. Was ich tun möchte, ist einer dieser beiden Klammerausdrücke:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
ABER [^
und [:
haben ihre eigenen Bedeutungen. Daher funktionieren die beiden obigen Befehle nicht.
Gibt es eine Möglichkeit, diese beiden Szenarien in einem Befehl zu erfassen?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
oder/opt/gnome$
suchen, werden Sie/opt/gnome-foo
oder finden/opt/gnome/bar
.