Начну с того, что считаю эту проблему чуть менее невинной, чем кажется.
Что мне нужно сделать: проверить папку в переменной окружения PATH. Это может быть в начале или где-то после. Мне просто нужно убедиться, что эта папка есть.
Пример моей проблемы - давайте использовать /opt/gnome
.
СЦЕНАРИЙ 1: папка не находится в начале пути
# 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: папка находится в начале ПУТИ.
# 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
.