2016-04-21 15 views
1

Ich habe viele Spalten in einer Tabelle. Ich will alles in meiner Anfrage ersetzen:Was ist der Vi-Editor Regex dafür?

select count(distinct a), count(distinct b), count(distinct c), count(distinct d) from table_name; 

um so etwas wie diese Aliase zu reflektieren:

select count(distinct a) as a, count(distinct b) as b, count(distinct c) as c, count(distinct d) as d from table_name; 
+0

Bitte bearbeiten Sie Ihre Frage, um besser zu spezifizieren, was Sie in Frage stellen. – buczek

+0

Können Sie bitte posten, was Sie bisher versucht haben? –

+1

': 1, $ s/(distinct \ ([a-z] * \))/(distinct \ 1) als \ 1/g' –

Antwort

0

Try this:

s/\vdistinct\s(.{1})\)/distinct \1) as \1/g 

Du musst die \v am Anfang gestellt Verwenden Sie Gruppen.

0

Ich habe versucht, dies in vim:

:1,$s/distinct (.{1}))/distinct \1) as \1/g

Ersatz etwas Matching "distinct, ein (erste Gruppe) nicht gieriges Spiel auf irgendetwas gefolgt, gefolgt von einem)" mit „distinct (den ersten Gruppe)) als (die erste Gruppe) "

Beachten Sie, dass die Adresse" 1, $ "alle Zeilen in der Datei auswählt. Edit inspiriert von Jerry Jeremiah.

+0

Dies gab mir diesen Fehler: Muster nicht gefunden: distinct (. {1})) – minx

+0

Das Original arbeitet am Anfang der Zeile, da die implizite Adresse eines Befehls die aktuelle Zeile ist. –

0

Verwenden der ex commmand s

s/count(distinct \([[:alpha:]_][[:alpha:]_]*\))/& as \1/g 

Ein robusteres Beispiel sed Verwendung nur Ausgangslinien mit select ersetzen.

!sed '/^select/s/count(distinct \([[:alpha:]_][[:alpha:]_]*\))/& as \1/g 
Verwandte Themen