Para procurar por field<decimals>
ocorrrences dentro de cast(...)
, supondo que não haja parênteses sem correspondência, com GNU grep
ou compatível com o suporte a PCRE:
<abc.txt grep -Po 'cast(\((?:[^()]++|(?1))*\))' |
grep -Po '\bfield\d+\b'
Isso está usando a capacidade do PCRE de definir expressões regulares recursivas . Acima de (?1)
refere-se à expressão regular incluída em (...)
, portanto, estamos procurando cast
seguido por um regexp "R" que começa com (
seguido por qualquer número de não-pais ( ++
é apenas a versão sem retrocesso de +
) ou mais "R" s seguidos por )
.
Isso nos permite encontrar o )
correspondente para a abertura (
que segue cast
.
O segundo grep
apenas extrai o field<decimal>
(rodeado por limites de palavras ( \b
)) das instruções cast(...)
que o primeiro grep
extrai.
Isso pressupõe que essas instruções SQL estejam em uma única linha. Caso contrário, você pode adicionar a opção -z
ao primeiro grep
.