Recuperando palavras antes de certos caracteres sem ter que usar Perl

1

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.

    
por András Hummer 04.02.2015 / 15:25

1 resposta

1

Tente canalizar a transferência via

sed 's/\S\+ \(= \|in (\)//g'
    
por 04.02.2015 / 17:54