(e) grep e agrupamento atômico [questão de compreensão]

0

Estou tentando entender o uso correto de " agrupamento atômico « aka » subexpressões independentes « aka » subpadrão sem retrocesso « [estes são os termos que encontrei para a mesma coisa, o que não o torna menos complicado]

  • egrep '123(?>fruit|juiceomatic)machine' significa: procure por %código%
  • MAS pare de tentar corresponder [o restante de] o conteúdo dos colchetes se 123fruitjuiceomaticmachine for seguido por algo diferente de 123 !

Isso está correto? Eu senti falta de algo importante?

Eu pergunto isso porque cheguei aos resultados esperados a maior parte do tempo, mas não tenho 100% de certeza se isso é porque eu fiz certo ou apenas fiz suposições de sorte.

    
por erch 16.04.2013 / 00:23

1 resposta

1

Esta não é uma expressão regular estendida (ERE). egrep interpretará isso como 123 seguido por >fruit ou juiceomatic (o ? é ignorado) seguido por machine . Isto significa que irá corresponder em:

123>fruitmachine
123>juiceomaticmachine

mas não:

123fruitjuiceomaticmachine

A notação (?>...) é de PCRE e significa grupo atômico sem captura , veja pcresyntax(3) . Você pode usá-los com o GNU grep e com a opção -P .

Se eu entendi corretamente, você precisa que 123 seja seguido por fruit , que pode ser seguido por juiceomatic ou nada. Nesse caso, acho que 123fruit(|juiceomatic)machine é o ERE que você quer.

    
por 16.04.2013 / 09:39