Inizierò dicendo che penso che questo problema sia un po 'meno innocente di quanto sembri.
Cosa devo fare: cerca una cartella all'interno della variabile d'ambiente PATH. Potrebbe essere all'inizio o da qualche parte dopo. Devo solo verificare che quella cartella sia lì.
Esempio del mio problema: usiamo /opt/gnome
.
SCENARIO 1: la cartella non è all'inizio del PERCORSO
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Nota che il grep deve essere abbastanza specifico in modo da non catturare /var/opt/gnome
. Da qui il colon.
SCENARIO 2: la cartella si trova all'inizio del PERCORSO.
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
Questo è il mio problema: ho bisogno di cercare due punti o un inizio di linea con questa cartella. Quello che vorrei fare è una di queste due espressioni tra parentesi:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
MA [^
e [:
hanno i loro significati. Pertanto, i due comandi sopra non funzionano.
C'è un modo in cui posso grep per questi due scenari in un solo comando?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
o/opt/gnome$
, troverai/opt/gnome-foo
o/opt/gnome/bar
.