Tente canalizar a transferência via
sed 's/\S\+ \(= \|in (\)//g'
Eu tenho cláusulas where para consultas SQL em formato de texto e gostaria de extrair os nomes das colunas delas. As cláusulas podem conter condições como col_1 = 'Spruce' e col_2 em ('Argentina', 'Camarões') .
Minha primeira pergunta é, é possível no ksh extrair col_1 e col_2 valores do texto (ou seja, todas as palavras antes in (
ou um sinal de igual). Eu sei que em condições if-else é possível controlar o fluxo de execução se o texto corresponder a um determinado padrão, no entanto eu não sei como eu poderia realmente recuperar as palavras que fizeram o texto corresponder determinado padrão.
ATUALIZAÇÃO:
Se a entrada for tree_type = 'Spruce' and country in ('Russia', 'Zambia')
, gostaria de receber tree_type country
.
Se a entrada for employee_state in ('Colorado', 'Wyoming', 'Louisiana') and dept_nr in (13, 732, 91) and case_code = 82517
, gostaria de receber employee_state dept_nr case_code
.
Eu tentei sed 's/\S\+ \((= \|in (\)//g'
, que removeu as palavras que eu queria manter e mantive tudo o que queria remover. Eu também tentei sed 's/\(\S\+ \)\(= \|in (\)//g'
, isso removeu =
e in (
, mas mantive todo o resto.
UPDATE 2:
Eu canalizei a primeira sugestão de Costas sed 's/\S\+ \(= \|in (\)//g'
para uma segunda variável, cujos elementos eu removi do original; obtendo assim o que eu queria:
$ A="employee_state in ('Colorado', 'Wyoming', 'Louisiana') and dept_nr in (13, 732, 91) and case_code = 82517"; B=$(echo $A | sed 's/\S\+ \(= \|in (\)//g'); for b in $B; do A=${A[@]/$b}; done; echo $A
employee_state dept_nr case_code
Costas, eu sou muito grato pela sua ajuda.
Tags ksh regular-expression