sed提取子字符串

时间:2019-07-18 13:02:07

标签: awk sed

我正在尝试使用sed从sql查询中提取表名。

到目前为止,我有:

 echo 'select * from marketo.leads limit 1;' | sed -n 's/.*from \(.*\) .*/\1/p'

结果: marketo.leads limit

不知何故,下一个单词也能被抓住。

2 个答案:

答案 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*'