REGEX e GREP - Cadeia de pesquisa incluindo palavras opcionais e estáticas

1

Estou tentando formular uma expressão regex para uso com o grep, de modo que eu encontre uma palavra estática presente no início de cada linha, seguida por apenas uma palavra de uma lista de opções.

Ou seja, as correspondências que eu quero são da seguinte forma: StaticWord-opt1 , StaticWord-opt2 , etc.

Este quase funciona:

grep -E "^StaticWord-[(opt1)?(opt2)?(opt3)?]+" fileToCheck

Mas obtenho correspondências como: StaticWord-opt1( , StaticWord-p e StaticWord-1

Como uma correspondência válida é válida apenas se tivermos uma única instância de op1, opt2 ou opt3, alterei a expressão para:

grep -E "^StaticWord-[(opt1)?(opt2)?(opt3)?]{1}" fileToCheck

Nesse ponto, recebo apenas correspondências como as duas últimas da lista descrita acima.

Minha lógica para a expressão é " StaticWord- está ancorada no início ^ seguido por qualquer uma das seguintes [ ] groups ( ) , cada uma das quais pode ou não estar presente ? . Por último, nós devemos ter apenas um da lista {1} .

    
por sherrellbc 17.11.2015 / 19:18

1 resposta

2

No caso de o jordanm não converter seu comentário em resposta, expandirei:

Você deseja usar o caractere | para dizer "opt1 ou opt2 ou opt3". Além disso, se você deseja que apenas um desses apareça, não deseja usar + , o que significa "um ou mais " . Isso deixa você mais perto:

grep -E "^StaticWord-(opt1|opt2|opt3)" fileToCheck

... mas então você tem a pergunta sobre o restante da linha. Se você não quer mais nada na linha, use:

grep -E "^StaticWord-(opt1|opt2|opt3)\$" fileToCheck

(onde escapei do cifrão do shell para que grep o veja como marcador de fim de linha).

    
por 17.11.2015 / 19:43