Comenzaré diciendo que creo que este problema es un poco menos inocente de lo que parece.
Lo que necesito hacer: buscar una carpeta dentro de la variable de entorno PATH. Podría ser al principio o en algún lugar después. Solo necesito verificar que esa carpeta esté allí.
Ejemplo de mi problema: usemos /opt/gnome
.
ESCENARIO 1: la carpeta no está al comienzo de PATH
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Tenga en cuenta que el grep debe ser lo suficientemente específico para que no se atrape /var/opt/gnome
. De ahí el colon.
ESCENARIO 2: la carpeta está al comienzo de PATH.
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
Este es mi problema: necesito buscar dos puntos o un inicio de línea con esta carpeta. Lo que me gustaría hacer es una de estas dos expresiones de paréntesis:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
PERO [^
y [:
tienen sus propios significados. Por lo tanto, los dos comandos anteriores no funcionan.
¿Hay alguna forma en que pueda manejar estos dos escenarios en un solo comando?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
o/opt/gnome$
, encontrará/opt/gnome-foo
o/opt/gnome/bar
.