Começarei dizendo que acho que esse problema é um pouco menos inocente do que parece.
O que eu preciso fazer: verifique se há uma pasta na variável de ambiente PATH. Pode ser no começo ou em algum lugar depois. Eu só preciso verificar se essa pasta está lá.
Exemplo do meu problema - vamos usar /opt/gnome
.
CENÁRIO 1: a pasta não está no início do CAMINHO
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Observe que o grep precisa ser específico o suficiente para não ser capturado /var/opt/gnome
. Daí o cólon.
CENÁRIO 2: a pasta está no início do CAMINHO.
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
Esse é o meu problema - preciso procurar dois pontos ou um início de linha com esta pasta. O que eu gostaria de fazer é uma dessas duas expressões de colchetes:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
MAS [^
e [:
têm seus próprios significados. Portanto, os dois comandos acima não funcionam.
Existe uma maneira que eu possa grep para esses dois cenários em um comando?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
ou/opt/gnome$
, você vai encontrar/opt/gnome-foo
ou/opt/gnome/bar
.