我正在尝试使用sed从sql查询中提取表名。
到目前为止,我有:
echo 'select * from marketo.leads limit 1;' | sed -n 's/.*from \(.*\) .*/\1/p'
结果:
marketo.leads limit
不知何故,下一个单词也能被抓住。
答案 0 :(得分:2)
这样做的原因是正则表达式是贪婪的,因此.*
会尽可能地吞咽。在这种情况下,它匹配marketo.leads limit
,其余行匹配1;
(空格,一个,分号)。
尝试
echo 'select * from marketo.leads limit 1;' | sed -n 's/.*from \([^ ]*\) .*/\1/p'
当然,这不是一个完美的解决方案-如果生产线是
select * from ['My funny table'] limit 1:
答案 1 :(得分:1)
具有-P
和-o
选项的grep:
grep -Po '.*from +\K\S*'