awk - sed 提取子串
问题描述
我正在尝试使用 sed 从 sql 查询中提取表名。
到目前为止,我有:
echo 'select * from marketo.leads limit 1;' | sed -n 's/.*from \(.*\) .*/\1/p'
结果:
marketo.leads limit
不知何故,下一个词也被抓住了。
解决方案
原因是正则表达式是贪婪的,所以.*
尽量吞下它。在这种情况下,它匹配marketo.leads limit
, 与行的其余部分匹配1;
(空格、一、分号)。
尝试
echo 'select * from marketo.leads limit 1;' | sed -n 's/.*from \([^ ]*\) .*/\1/p'
当然,这不是一个完美的解决方案——如果线路是
select * from ['My funny table'] limit 1:
推荐阅读
- node.js - npm 和 package.json _ npm ERR 中的所有者存储库有问题!400 错误请求(npm 发布)
- twitter-bootstrap - 我尝试使用 boostrap4 使文本居中对齐,但它不起作用?
- javascript - 试图用玩笑和酶对可重复使用的组件进行测试
- next.js - Nextjs 中的@Babylonjs (ES6) 因意外令牌“导出”而失败
- python - 在 MacOS Big Sur 中强制使用 10.x 轮子
- javascript - Vue-Formulate Failed to resolve component 错误如何解决
- r - R:如何在先前样本的条件下对值进行采样
- excel - 无法在 VBA 中创建 Scripting.Dictionary 或 MSXML.DOMDocument60,因为 Windows 更新 KB4586781
- java - 为什么我不能将 java 连接到 MySql ,(连接错误)?
- sql - 将我的 jhipster 项目连接到 postgresSql