我有文本形式的 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'