2016-05-04 51 views
0

我試圖寫一個bash腳本,將能夠跨文件可以從grep表名(目錄內)文件內容中的SQL表名的列表,部分匹配一個字符串。grep的目錄匹配的表名稱格式

對於我而言,我想返回以下某個約定(不區分大小寫)的所有表引用:

  • tblpl
  • tbljoin
  • tbldim

這將理想返回像這樣的列表:

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

如果這有助於降低一些複雜性,則一次匹配一個表格名稱格式也可以。爲了澄清,這將只返回表名 - 而不是文件名/所有文件內容。可以肯定地說,表名的末尾將由一個空格分隔,因爲它是SQL。

在哪裏,我已經開始:

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

任何幫助/指針讚賞這裏 - 感謝!

編輯:這兩種回答釘我的使用情況。最後,我添加了擴展正則表達式(對這個建議非常感謝),但是我必須記錄寫入大部分內容的人。謝謝大家!

我長時間使用的情況下結束了對錶的這個名單,然後腳本返回給查詢友好的格式,所以我可以把這些爲A項WHERE的方式。如果沒有人需要它:

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.tblplColorSwatches」,「db.tbljoinCustomerSegment」 ......

回答

1

它發現的字母和任何時間序列混合之後.tblpl.tbljoin.tbldim後跟一個或多個字母(見regex101 link

試試這個正則表達式:

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

能否請您擴大這是什麼一樣,它是如何解決的OP? –

+0

它找到的字母和週期任何混合序列,隨後.tblpl或.tbljoin或.tbldim後跟一個或多個字母(見regex101鏈路) – sweaver2112

1

我會使用-E標誌使用擴展的正則表達式:

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