2016-05-04 4 views
0

Ich versuche, ein Bash-Skript zu schreiben, das in der Lage wäre, Tabellennamen aus Dateien (innerhalb eines Verzeichnisses), die teilweise übereinstimmen ein Faden.Grep eine Liste von SQL-Tabellennamen innerhalb der Datei Inhalt eines Verzeichnisses mit einem Tabellenname formatieren

Für meinen Fall würde Ich mag alle Tabellenverweise nach einer bestimmten Konvention (Groß- und Kleinschreibung) zurückzukehren:

  • tblpl
  • tbljoin
  • tbldim

Dies würde im Idealfall eine Liste wie folgt zurücksenden:

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

Es wäre auch in Ordnung, ein Format für einen Tabellennamen gleichzeitig zuzuordnen, wenn dadurch die Komplexität reduziert werden könnte. Zur Klarstellung würde dies nur die Tabellennamen zurückgeben - nicht den Dateinamen/den gesamten Dateiinhalt. Es ist sicher zu sagen, dass das Ende des Tabellennamens durch ein Leerzeichen begrenzt wird, da es SQL ist.

Wo ich angefangen habe:

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

Jede Hilfe/Zeiger werden hier- Dank geschätzt!

Bearbeiten: Beide Antworten genagelt mein Anwendungsfall. Am Ende habe ich den erweiterten Regex hinzugefügt (ein riesiger Dank für diese Empfehlung), aber ich muss der Person, die den Großteil davon geschrieben hat, Kredit geben. Danke allen!

Mein erweiterter Anwendungsfall endete damit, diese Liste von Tabellen zurückzugeben und sie dann in ein abfragefreundliches Format zu schreiben, damit ich sie in eine WHERE IN-Klausel schreiben konnte. Für den Fall, muss jemand jemals:

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; }' 

Returns formatiert, wie: ‚db.tblplColorSwatches‘, ‚db.tbljoinCustomerSegment‘ ...

Antwort

1

Es findet jede gemischte Abfolge von Buchstaben und Perioden gefolgt von .tblpl oder .tbljoin oder .tbldim durch einen oder mehrere Buchstaben folgen (siehe regex101 link)

versuchen, diesen regulären Ausdruck:

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

Können Sie bitte erweitern auf, was das tut und wie es befasst sich mit der OP? –

+0

findet es eine gemischte Folge von Buchstaben und Punkten gefolgt von .tblpl oder .tbljoin oder .tbldim gefolgt von einem oder mehreren Buchstaben (siehe regex101 link) – sweaver2112

1

Ich würde verwenden, um die -E Flagge erweiterten regulären Ausdruck zu verwenden:

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