Zacznę od stwierdzenia, że uważam, że ten problem jest nieco mniej niewinny niż się wydaje.
Co muszę zrobić: sprawdź folder w zmiennej środowiskowej PATH. Może być na początku lub gdzieś później. Muszę tylko sprawdzić, czy ten folder tam jest.
Przykład mojego problemu - użyjmy /opt/gnome
.
SCENARIUSZ 1: folder nie znajduje się na początku ŚCIEŻKI
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Zauważ, że grep musi być wystarczająco specyficzny, aby się nie wyłapał /var/opt/gnome
. Stąd dwukropek.
SCENARIUSZ 2: folder znajduje się na początku ŚCIEŻKI.
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
To jest mój problem - muszę szukać dwukropka lub początku linii w tym folderze. Chciałbym zrobić jedno z tych dwóch wyrażeń w nawiasach:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
ALE [^
i [:
mają swoje własne znaczenie. Dlatego dwa powyższe polecenia nie działają.
Czy istnieje sposób na grep dla tych dwóch scenariuszy za pomocą jednego polecenia?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
lub/opt/gnome$
, znajdziesz/opt/gnome-foo
lub/opt/gnome/bar
.