[bash-script] # vervangen door %23

Pagina: 1
Acties:

  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

Topicstarter
Ik probeer een bash-scriptje te schrijven als wrapper voor wget, om van een ftp-server (niet van mij) bestanden te downloaden. Probleem is dat de ftp-server #-jes gebruikt in de directory-namen.

Bestand wat ik wil downloaden is dan bv:

ftp://server.nl/# = categorie = #/bestand.ext

Ik gebruik meestal mozilla om de bovenstaande link te copyen, en dan een terminal waarin ik de link plak, maar mozilla zet wel de spaties om in %20, maar de #jes niet in %23. Wget kan dan niet goed verbinding maken ofzo. Dat moet ik dus met de hand doen, of met het script. Het eerste lukt wel, maar is niet handig.

Spaties vervangen door %20 doe ik met het volgende stukje:
Bash:
1
t1=${1// /%20}

$1 is dus de url, met spaties en hekjes.
naief, werkt dus niet:
Bash:
1
t2=${t1//#/%23}

Maar weet niet zo goed waarom niet. de output wordt in dit geval t1, maar alle hekjes worden niet vervangen, en er staat opeens %23 voor :?
voorbeeld:
Bash:
1
2
$ ./script ftp://bla/#%20=%20blaaa/bestand
%23ftp://bla/#%20=%20blaaa/bestand

Weet iemand hoe je kunt doen wat ik wil?

[ Voor 3% gewijzigd door smokalot op 20-11-2003 13:23 ]

It sounds like it could be either bad hardware or software


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
Vaag, dat het niet werkt met een hekje. Misschien dat bash het als operator ziet? In ieder geval, dit werkt wel:
code:
1
t2=${t1/\/#*=/\/%23%20=}
Ik vervang hier gewoon alls vanaf '/#' tot en met '=' door de gewenste tekens.
Ter informatie: deze pagina was voor mij erg nuttig om dit soort bash-features te leren.

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


  • hammerhead
  • Registratie: April 2000
  • Laatst online: 24-02 08:18
Lijkt idd erop dat hekje een code is.... Even snel op die ABS guide gekeken en idd:
code:
1
2
3
stringZ=abcABC123ABCabc
echo ${stringZ/#abc/XYZ}          # XYZABC123ABCabc
                                  # Replaces front-end match of 'abc' with 'XYZ'.

Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Edit: laat maar 7(8)7

[ Voor 74% gewijzigd door kenneth op 20-11-2003 13:48 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
hammerhead schreef op 20 november 2003 @ 13:48:
Lijkt idd erop dat hekje een code is....
In die guide staat nergens dat '//#' ook een code is, dus volgens mij had het gewoon moeten werken (of is die guide niet compleet natuurlijk :))
Zelfs '//\#' werkt trouwens niet, waarmee je toch duidelijk aangeeft dat je het character # bedoelt, en niet een eventuele code....

[ Voor 21% gewijzigd door ajvdvegt op 20-11-2003 14:14 . Reden: \/ opmerking ]

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


Verwijderd

code:
1
2
3
4
5
6
7
8
#!/bin/sh
if [ $# -gt 0 ]; then
    URI=`echo $@ | sed -e "s/#/%23/g" -e "s/\ /%20/g"`
    wget $URI
else
    echo "Usage: `basename $0` <url>"
    exit 1
fi


code:
1
2
3
4
lain [r3boot]$ sh ./bla "http://www.example.com/ #eenbla# /index.html"
--14:25:00--  http://www.example.com/%20%23eenbla%23%20/index.html
           => `index.html'
...


edit:

zo dan, nu worden ook de spaties ge-convert.

[ Voor 53% gewijzigd door Verwijderd op 20-11-2003 14:26 ]


  • Wilke
  • Registratie: December 2000
  • Laatst online: 07:50
En gewoon met wat quotjes strooien helpt niet?

i.e. wget "http://een.url/met-hekjes#blaat"

  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

Topicstarter
Wilke schreef op 20 november 2003 @ 14:30:
En gewoon met wat quotjes strooien helpt niet?

i.e. wget "http://een.url/met-hekjes#blaat"
nee, " helpt wel tegen spaties (anders ziet wget het als meerdere urls), maar niet tegen #. Eerst dacht ik dat bash alles na de # als commentaar zag, maar dat blijkt niet zo te zijn. \# werkt ook niet. Het schijnt dat zowel wget als bash problemen hebben met het #.

Het script van r3boot ziet er goed uit, had helemaal niet gedacht aan sed | :( (heb er ook weinig verstand van trouwens).

* smokalot gaat proberen

It sounds like it could be either bad hardware or software


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Het is alleen wget idd.

Maar bash doet het wel goed:

code:
1
2
[kenneth@stip:~] echo hoi#dag
hoi#dag

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Insanergy
  • Registratie: Juli 2001
  • Laatst online: 29-11-2025
waarom doe je het niet met ncftpget?

But I thought YOU did the backups...


  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

Topicstarter
kenneth schreef op 20 november 2003 @ 16:45:
Het is alleen wget idd.

Maar bash doet het wel goed:

code:
1
2
[kenneth@stip:~] echo hoi#dag
hoi#dag
klopt, maar bij het substituten van variabelen dus weer niet...

It sounds like it could be either bad hardware or software

Pagina: 1