Je commencerai par dire que je pense que ce problème est un peu moins innocent qu'il n'y paraît.
Ce que je dois faire: rechercher un dossier dans la variable d'environnement PATH. Cela pourrait être au début ou quelque part après. J'ai juste besoin de vérifier que ce dossier est là.
Exemple de mon problème - utilisons-le /opt/gnome
.
SCÉNARIO 1: le dossier n'est pas au début 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
Notez que le grep doit être suffisamment spécifique pour ne pas se bloquer /var/opt/gnome
. D'où le colon.
SCENARIO 2: le dossier est au début 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
C'est mon problème - je dois rechercher un deux-points ou un début de ligne avec ce dossier. Ce que je voudrais faire, c'est l'une de ces deux expressions entre crochets:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
MAIS [^
et [:
ont leurs propres significations. Par conséquent, les deux commandes ci-dessus ne fonctionnent pas.
Existe-t-il un moyen de grep pour ces deux scénarios dans une seule commande?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
ou/opt/gnome$
, vous trouverez/opt/gnome-foo
ou/opt/gnome/bar
.