Eu uso o seguinte padrão para correspondência de regex em grep (zgrep, como pesquisa em arquivos compactados) como
zgrep -P '(?<=start).{20,120}(?=end)' *
Preciso adicionar alguns termos com OR
operador no meio, mas esse padrão não funciona
zgrep -P '(?<=start)[first|second|third].{20,120}(?=end)' *
Como posso introduzir first|second|third
no meio da string correspondente?
A expressão entre colchetes
[..]
corresponde a qualquer caractere único da lista, portanto,[first|second|third]
corresponde a cada letra separadamente:f
,i
,r
,s
,t
,|
,e
, etc. (observe que não há necessidade de segundos
). Existem poucas exceções a essa regra, como^
no início é negação ou-
marca o intervalo de caracteres, mas o pipe|
não é especial, entãogrep
apenas procura por esse sinal no arquivo.O que você quer é
(first|second|third)
. Tudo dentro(..)
forma uma subexpressão da expressão regular principal e pode ser combinada/juntada com a|
qual é interpretada como operador OR.