在与表名格式匹配的目录的文件内容中生成SQL表名列表

  • 本文关键字:SQL 列表 格式 文件 regex grep
  • 更新时间 :
  • 英文 :


我正在尝试编写一个bash脚本,该脚本能够从部分匹配字符串的文件(在目录中)中grep表名。

对于我的情况,我希望按照某种约定(不区分大小写)返回所有表引用:

  • tblpl
  • tbljoin
  • tbldim

这将理想地返回这样的列表:

product.dbo.tblplColors
product..tblplMonograms
solr.dbo.tbljoinSkuCategory

如果一次匹配一个表名格式有助于降低一些复杂性,那么也可以。为了澄清,这将只返回表名,而不是文件名/所有文件内容。可以肯定地说,表名的末尾将由空格分隔,因为它是SQL。

我从哪里开始:

 grep -rio 'tblpl*[^ ]' d:/sqldirectoryhere > c:/Users/foo/Desktop/tables.txt

感谢您的帮助/指点-谢谢!

编辑:这两个答案都确定了我的用例。我最终添加了扩展正则表达式(非常感谢您的推荐),但我必须感谢写了大部分正则表达式的人。谢谢大家!

我的扩展用例最终是一种返回表列表的方法,然后将其编写为查询友好格式,这样我就可以将这些表放入WHERE IN子句中。万一有人需要它:

grep -rioE --no-filename '[a-zA-Z_.]+.tbl(pl|join|dim)[a-zA-Z_]+' {DIRECTORY_HERE} | sed -n 's/.*/x27&x27/; $! s/$/,/; 1 h; 1 ! H; $ { x; s/n/ /g; p; }'

返回格式为:"db.tblColorWatches"、"db.tpljoinCustomerSegment"…

它查找任何字母和句点的混合序列,后面跟着.tblpl.tbljoin.tbldim,后面跟着一个或多个字母(请参见regex101链接)

试试这个正则表达式:

[a-zA-Z.]+.tbl(pl|join|dim)[a-zA-Z]+

我将使用-E标志来使用扩展正则表达式:

grep -rioE '[a-z]*.[a-z]*.tbl(pl|join|dim)[a-z]*' d:/sqldirectoryhere 

最新更新