Como usar o lookup negativo do regex?

2

Estou tentando usar gatilhos de perfil iTerm2 no meu mac para alterar o prompt se eu deixar meu diretório pessoal. Essa regra deve ser aplicada somente quando o nó em que eu estou tem um nome de host de headnode . O prompt também incluirá a localização da máquina entre parênteses após o nome do host. Estou tentando construir um regex que corresponderá a qualquer diretório, a menos que inclua ~ .

Portanto, deve corresponder:

[jbutryn@headnode (us-west-a) /]$

mas não:

[jbutryn@headnode (us-west-a) ~]$
or
[jbutryn@headnode (us-west-a) ~/tmp]$
etc.

Atualmente, estou criando meu regex assim:

\[.*\@headnode.*(?!\~).*].

Mas isso corresponde a todos os exemplos acima. Alguém sabe o que estou fazendo errado? Obrigado!

    
por Jesse_b 09.08.2017 / 17:48

1 resposta

3
\[.*\@headnode.*(?!\~).*\]

Correspondências em

  1. [ seguido por
  2. .* : uma sequência de 0 ou mais caracteres seguida por
  3. @headnode seguido por
  4. .* : uma sequência de 0 ou mais caracteres que não é seguida por
  5. ~ , seguido por
  6. .* : uma sequência de 0 ou mais caracteres seguida por:
  7. ]

Corresponde em:

[jbutryn@headnode (us-west-a) ~/tmp]$

Porque isso é:

<[><jbutryn><@headnode>< (us-west-a) ~/tmp><><]>$
 1  2        3          4                  6  7

O que segue 4 não é ~ .

Você precisaria do aspecto negativo para estar em uma posição que corresponde a algo específico no texto, como após a primeira palavra depois de @headnode :

\[.*\@headnode \S+ (?!\~).*\]
    
por 09.08.2017 / 18:01