Se você quiser usar acima em um comando grep, use a opção de suporte de regex estendido -E
com limites de palavras:
grep -E "\ba[bc]?\b" file
OR
grep -E "\<a[bc]?\>" file
Agora, eu tenho três strings para serem correspondidas por um único re - 'a', 'ab', 'ac' Eu suponho que um correto deve ser 'a [bc]?', Mas não parece correto. Qual é o correto?
Eu tento no comando grep. E parece que não há '?' na regex do grep. Então, como fazer essa correspondência no grep?
Graças a @anubhava, agora posso combinar todas essas três strings:
grep -E 'a[bc]?' <file>
No entanto, esta expressão também corresponde a 'ad'.
Na verdade, quero corresponder a todas essas situações: 'a', 'abc', 'ab', 'ac' mas não quer corresponder 'ad' ou 'ae'
Para usar esta expressão no modo básico, você precisa escapar do ponto de interrogação:
grep 'a[bc]\?' file
Atualizar
Para resolver sua última pergunta, aconselho usar o modo P (erl):
grep -P 'a(?![de])|a[bc]|abc'
Estas são as alternativas:
Corresponda um 'a' se não for seguido por 'd' ou 'e' (usa um resultado negativo)
Corresponde a 'ab' ou 'ac'
Corresponder 'abc'
Se você quiser que a string corresponda à regex do começo ao fim, inclua na regex o início ^
e o final $
marcadores
^a[bc]?$
Se os marcadores não fizerem parte da regex, 123ab456
corresponderá à regex.