Tabelle aus SQL-Statement filtern

C

commander

Grünschnabel
hallo zusammen
ich möchte aus einem übergebenen sql-statement (parameter eines shell scripts) die angegebene tabelle herausfiltern, da ich diese für einen weiteren befehlabsatz benötige.

der sql-befehl kann unterschiedlich aufgebaut sein:
- Select a from b
- Select * from c
- Select * from y where ...

So kenne ich nur die Position der Tabelle nach "from ". Wie schneide ich den ersten Teil weg? Nach dem ich diesen entfernt hätte, könnte ich mit sed
echo $sql | sed -e "s/tab.*//g" > tab
den hinteren teil wegschneiden.
Hat jemand eine idee?
 
Hi,

Code:
echo ${sql#*from}
sollte den Trick eigentlich tun.

mfg,
bytepool
 
ja, klappt. problem gelöst.
besten dank dafür bytepool!
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

habe noch eine weitere frage:
ich möchte ein apostroph ' durch ein \' in einem befehl (variable) ersetzen.
dies wird wieder für eine weitere befehlsabsetzung benötigt.
hat jemand eine idee?
 
Zuletzt bearbeitet:
Hi,

so in etwa?

Code:
$ sql="select 'foo' from 'bar';"
$ echo $sql | sed "s$'$\\\'$"g
select \'foo\' from \'bar\';

mfg,
bytepool
 
ich habe nochmals eine frage betreffend eines sql-statements.
bin an einem prog dran, das von einem rechner aus ein shell skript mit parameter aufruft, den befehl via ssh übermittelt und auf einem weiteren rechner ausführt und das ergebnis zurückliefert.

prog "pc" "'Select * from test' -d database" -> funktioniert soweit

prog "pc" "'Select * from test Where name="pc1"' -d database"

wenn ich hingegen eine where-bedinung aufführe, dessen vergleich anführungszeichen benötigt (="pc1") funktioniert das prog nicht mehr.
aus den debug-informationen sehe ich, dass die einzelnen wörter bei der übermittlung folgendermassen auseinander genommen werden:
"Select"
"*"
...
"name=pc1"

dadurch kann die sql-abfrage nicht ausgeführt werden, weil die "" nicht mehr stehen.

hat jemand von euch eine idee wie ich die "" trotzdem beibehalten kann?
( \" und \" funkt. nicht)
 
danke für die antwort SkydiverBS.
ja, habe ich bereits. das problem: so meldet das sql-statement einen fehler, auch wenn ich die abfrage lokal ausführe.
 
Hi,

ich denke dass du in diesem Fall etwas konkreter werden musst, und mal mit ein wenig Beispielcode rausruecken musst. Auch deine Beschreibung ist extrem abstrakt, so ist das eher ein Raetselraten. ;)
Ich denke insbesondere das ssh statement waere wichtig, aber auch ein wenig Kontext kann nicht schaden.

mfg,
bytepool
 
ok, stimmt. trotzdem danke.
anderer ansatz:
auf dem zweiten server läuft eine sqlite datenbank.
über ssh erstelle ich eine verbindung und möchte anschliessend infos aus der db abfragen.

soweit so gut.
- rufe sqlite auf
- attache die db
- mache eine select-abfrage #-> infos werden ausgegeben

eine automatisation besteht darin, den attach- und select- in eine db zu schreiben und diese sqlite zu übergeben.
prompt> sqlite <dbinfo #-> infos werden ausgegeben

nun frage ich mich, ob die möglichkeit besteht die infos mittels einer befehlszeile zu erhalten.
prombt> sqlite , .databases #-> funkt, main wird angezeigt.
prompt> sqlite , ".echo on" , .databases # -> funkt. nicht mehr

wünschenswerter befehl:
prompt> slite , "attach db" "select * from tab" #-> funkt natürlich auch nicht

hat jemand eine idee/lösung?
 

Ähnliche Themen

CentOS 6.3 RADIUS - Keine Verbindung möglich

SQL Script Parameter übergeben

Zurück
Oben