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 .