我試圖寫一個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」 ......
能否請您擴大這是什麼一樣,它是如何解決的OP? –
它找到的字母和週期任何混合序列,隨後.tblpl或.tbljoin或.tbldim後跟一個或多個字母(見regex101鏈路) – sweaver2112