无需使用 Perl 即可检索某些字符之前的单词

无需使用 Perl 即可检索某些字符之前的单词

我有文本形式的 SQL 查询的 where 子句,我想从中提取列名。这些子句可以包含如下条件col_1 = '云杉' 和 col_2 in ('阿根廷', '喀麦隆')

我的第一个问题是,是否可以在 ksh 中提取列_1列_2文本中的值(即之前的所有单词in (或等号)。我知道在如果别的如果文本与给定模式匹配,则可以控制执行流程,但是我不知道如何实际检索使文本与特定模式匹配的单词。

更新:

例如。如果输入是tree_type = 'Spruce' and country in ('Russia', 'Zambia'),我想得到tree_type country

如果输入是employee_state in ('Colorado', 'Wyoming', 'Louisiana') and dept_nr in (13, 732, 91) and case_code = 82517我想得到employee_state dept_nr case_code.

我尝试过sed 's/\S\+ \((= \|in (\)/\1/g',删除了我想保留的单词,并保留了我想删除的其他所有内容。我也尝试过sed 's/\(\S\+ \)\(= \|in (\)/\1/g',这删除了=​​和in (,但保留了其他所有内容。

更新2:

我将科斯塔斯的第一个建议输入sed 's/\S\+ \(= \|in (\)/\1/g'到第二个变量中,我从原始变量中删除了该变量的元素;从而得到我想要的:

$ 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 (\)/\1/g'); for b in $B; do A=${A[@]/$b}; done; echo $A

employee_state dept_nr case_code

科斯塔斯,我非常感谢你的帮助。

答案1

尝试通过管道输出

sed 's/\S\+ \(= \|in (\)/\1/g'

相关内容