SED invoegprobleem

Pagina: 1
Acties:

  • Reveal!
  • Registratie: November 1999
  • Laatst online: 18:44
Ik wil op elke 4de regel dit toevoegen
$db=mysql_connect($dbhost, $dbuser, $dbpasswd);\
mysql_select_db($dbname,$db)

Nou had ik dit maar dat werk nie,
code:
1
2
3
4
5
6
7
for i in `find . -name index.php`
do
sed `4a\$db=mysql_connect($dbhost, $dbuser, $dbpasswd);\
mysql_select_db($dbname,$db)`  "$i.sedsave" > "$i"
echo $i
rm "$i.sedsave"
done


iemand enig id wat ik fout doe ?

  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 06-01 23:13

DeMoN

Pastafari

Reveal! schreef op woensdag 05 juli 2006 @ 11:29:
Nou had ik dit maar dat werk nie,
Wat is de foutmelding?

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


  • Taygeta
  • Registratie: April 2005
  • Laatst online: 14:51

Taygeta

KTM 790 Adventure

probeer het zo

mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname);

aah laat maar probleem zit in SED... :9 lette niet op

[ Voor 29% gewijzigd door Taygeta op 05-07-2006 11:42 ]


  • Wilke
  • Registratie: December 2000
  • Laatst online: 15:10
Heh, generative programming met houtje-touwtje tools? Of wat probeer je?

Het wekt in ieder geval de suggestie dat hier een betere manier voor moet zijn.

Wat sowieso niet klopt aan je code is dat er verkeerde quotes staan op regel 3 - sed `blabla`, in plaats van sed 'blabla' wat waarschijnlijk al een stuk beter gaat werken.

Trouwens waarom moeilijk doen met sed:

code:
1
2
3
4
5
6
7
8
9
10
for i in `find . -name index.php`; do
  lineno=0
  while read line; do
    if [ "$[lineno++]" == "3" ];then # 3 of 4, whatever het moet zijn..
      echo "in te voegen tekst" >> $i.sedsave
      echo "etc." >> $i.sedsave
    fi
    echo $line >> $i.sedsave
  done < $i
done

[ Voor 38% gewijzigd door Wilke op 05-07-2006 12:28 ]


  • Reveal!
  • Registratie: November 1999
  • Laatst online: 18:44
Wilke schreef op woensdag 05 juli 2006 @ 12:21:
Heh, generative programming met houtje-touwtje tools? Of wat probeer je?

Het wekt in ieder geval de suggestie dat hier een betere manier voor moet zijn.

Wat sowieso niet klopt aan je code is dat er verkeerde quotes staan op regel 3 - sed `blabla`, in plaats van sed 'blabla' wat waarschijnlijk al een stuk beter gaat werken.

Trouwens waarom moeilijk doen met sed:

code:
1
2
3
4
5
6
7
8
9
10
for i in `find . -name index.php`; do
  lineno=0
  while read line; do
    if [ "$[lineno++]" == "3" ];then # 3 of 4, whatever het moet zijn..
      echo "in te voegen tekst" >> $i.sedsave
      echo "etc." >> $i.sedsave
    fi
    echo $line >> $i.sedsave
  done < $i
done
hmm da werk nie .... en kende eigenlijk alleen sed en awk als command line tool om iets aan te passen in bestanden :D

  • Reveal!
  • Registratie: November 1999
  • Laatst online: 18:44
error is,

./test.sh: command substitution: line 1: syntax error near unexpected token `$dbhost,'
./test.sh: command substitution: line 1: `4a$db=mysql_connect($dbhost, $dbuser, $dbpasswd);mysql_select_db($dbname,$db)'
sed: -e expression #1, char 1: unknown command: `.'
./kws/index.php
./test.sh: command substitution: line 1: syntax error near unexpected token `$dbhost,'
./test.sh: command substitution: line 1: `4a$db=mysql_connect($dbhost, $dbuser, $dbpasswd);mysql_select_db($dbname,$db)'
sed: -e expression #1, char 1: unknown command: `.'
./index.php

  • Reveal!
  • Registratie: November 1999
  • Laatst online: 18:44
Wilke schreef op woensdag 05 juli 2006 @ 12:21:
Wat sowieso niet klopt aan je code is dat er verkeerde quotes staan op regel 3 - sed `blabla`, in plaats van sed 'blabla' wat waarschijnlijk al een stuk beter gaat werken.
Damn dat was de oplossing ..... hmz

  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 06-01 23:13

DeMoN

Pastafari

Reveal! schreef op woensdag 05 juli 2006 @ 14:00:
[...]


Damn dat was de oplossing ..... hmz
Daarom vroeg ik de foutmelding ook :) Je kan namelijk met gemak aan die foutmelding zien dat er wat mis is met hoe je die string die je in die file wilt hebben omringt met quotes. Iig zie je dat hij over zijn nek gaat op die string ;)

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


  • Wilke
  • Registratie: December 2000
  • Laatst online: 15:10
Reveal! schreef op woensdag 05 juli 2006 @ 14:00:
Damn dat was de oplossing ..... hmz
Probleem opgelost, maar je weet nog niet waarom dat het nu was, zo te zien.

Als je `blabla` schrijft, dan komt de *uitvoer* van dat commando terecht op die plaats, alsof je het gewoon daar had geschreven. Dus als ik schrijf:

aantalfiles=`ls | wc -l` # tel aantal regels output van ls, is ca. het aantal files

dan krijgt de variabele 'aantalfiles' op het moment dat je deze regel uitvoert, de waarde die uit dat commando komt. Als er bv. 30 files in de huidige dir staan, is het net alsof je had opgeschreven
aantalfiles='30'

De andere quotes geven gewoon aan dat de tekst ertussen op geen enkele manier geinterpreteerd moet worden door de shell; bv. normaalgesproken zou de shell de tekst * (sterretje) expanden naar een lijst van alle files in de huidige dir. Als je schrijft '*' (met quotes erom) gebeurt dat dus juist niet.

In jouw geval wilde je zo'n letterlijk string opgeven (dus zo: 'blablabla') en niet dat andere. Je kunt (in jouw voorbeeld) die 'enkele quotes' niet weglaten, omdat er teksten voorkomen die de shell zou interpreteren als je geen quotes of dubbele quotes gebruikt (te weten $blaat wordt vervangen door de waarde van die variabele; die in de shell niet bestaat en dus vervangen wordt door "niks", in dat geval).

Maar zoek ook eens in de 'Bash programming HOWTO'.

[ Voor 13% gewijzigd door Wilke op 05-07-2006 16:07 ]


  • Reveal!
  • Registratie: November 1999
  • Laatst online: 18:44
Wilke schreef op woensdag 05 juli 2006 @ 16:05:
[...]


Probleem opgelost, maar je weet nog niet waarom dat het nu was, zo te zien.

Als je `blabla` schrijft, dan komt de *uitvoer* van dat commando terecht op die plaats, alsof je het gewoon daar had geschreven. Dus als ik schrijf:

aantalfiles=`ls | wc -l` # tel aantal regels output van ls, is ca. het aantal files

dan krijgt de variabele 'aantalfiles' op het moment dat je deze regel uitvoert, de waarde die uit dat commando komt. Als er bv. 30 files in de huidige dir staan, is het net alsof je had opgeschreven
aantalfiles='30'

De andere quotes geven gewoon aan dat de tekst ertussen op geen enkele manier geinterpreteerd moet worden door de shell; bv. normaalgesproken zou de shell de tekst * (sterretje) expanden naar een lijst van alle files in de huidige dir. Als je schrijft '*' (met quotes erom) gebeurt dat dus juist niet.

In jouw geval wilde je zo'n letterlijk string opgeven (dus zo: 'blablabla') en niet dat andere. Je kunt (in jouw voorbeeld) die 'enkele quotes' niet weglaten, omdat er teksten voorkomen die de shell zou interpreteren als je geen quotes of dubbele quotes gebruikt (te weten $blaat wordt vervangen door de waarde van die variabele; die in de shell niet bestaat en dus vervangen wordt door "niks", in dat geval).

Maar zoek ook eens in de 'Bash programming HOWTO'.
Hmm deze moet ik nog ff paar keer opnieuw lezen :)

  • Zwerver
  • Registratie: Februari 2001
  • Niet online
offtopic:
Hoeveel files heb je nu voorzien van die mysql_connect regel? Had je daar dan niet beter een nette include voor kunnen gebruiken?

Woonachtig Down Under. Ik negeer je insults niet, maar tegen de tijd dat ik ze lees zijn ze meestal niet relevant meer

Pagina: 1