Hai,
bedankt voor de snelle reactie en de uitleg.
Als ik het voorgestelde commando draai vanaf de command prompt dan krijg ik als reactie alleen een > op het scherm te zien, met ctrl-c kom ik daar weer uit terug in de command line. Zie onderstaand het geplakte resultaat.
ben@ontwikkeldoos:/var/www/cgi-bin$ echo "145500000 M USB 0"` | grep -e 'input.*name="val_z"' | head -n1 | sed -n 's/^.*value="\(.*\)".*$/\1/p
>
Inmiddels heb ik nog een andere oplossing aangereikt gekregen, waarbij de tekst in rood de tekst van mij is en de rest de reactie:
dus het commando waarbij F (voor frequentie) variabele wordt gestuurd (dus F 144500000 ) moet nu F 144500000 M USB 0 gaan sturen.
Het sed commando wat ik gebruik maakt er echter 14450000+M+USB+0 van en ik heb geen idee waar ik het moet zoeken.
Het probleem is dat browsers spaties coderen als '%20' of als '+', je moet dus de input die je van de webserver krijgt dus enigzins bewerken om dat zo te krijgen.
<input type="radio" name="val_z" value="145312500"> geeft met
ZZ=`echo "$QUERY_STRING" | sed -n 's/^.*val_z=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` keurig 145312500 als waarde in ZZ
Wat de 'ZZ' regel doet is het ontvangen van de parameters in HTTP GET call, de QUERY_STRING. Daar staat dan in:
z_val=145312500
eventueel met meerdere parameters, dan kan het dus ook zijn
z_val=145312500&nog_een=23123213&nog_twee=131231
Die wordt eerst ge-echod en door de eerste sed aanroep geparsed. Die zoekt naar 'val_z=' en alles wat daarna volgt dat geen '&' is wordt opgeslagen in match parameter 1. De hele regel wordt gematched en vervangen door die eerste match. Dus in het geval van mijn tweede voorbeeld wordt het dan:
[pjoe@mbpjoe]~$ echo "val_z=145312500&nog_een=23123213&nog_twee=131231" | sed -n 's/^.*val_z=\([^&]*\).*$/\1/p'
145312500
Wat de tweede sed doet is alle http encoded spaties vervangen door gewone spaties. Dus stel dat je waarde van z_val
'14450000 M USB 0'
is, dan wordt dat door de browser en de webserver omgevormd naar
'14450000%20M%20USB%200'
Het tweede sed commando maakt daar dan weer van:
'14450000 M USB 0'
Maar het komt dus ook voor dat sommige browsers en webservers er dit van maken
'14450000+M+USB+0'
Om die dus goed te krijgen moet je er nog een sed script aan toevoegen:
ZZ=`echo "$QUERY_STRING" | sed -n 's/^.*val_z=\([^&]*\).*$/\1/p' | sed "s/%20/ /g" | sed "s/\+/ /g"`
Die laatste sed vervangt ook de plusjes door spaties, die backslash moet ervoor omdat de plus gebruikt wordt als speciaal karakter. Als die plus er niet staat dan betekent het 'voorgaande karakter 1 of meer keer'.
[pjoe@mbpjoe]~$ echo "14450000+M+USB%200" | sed 's/%20/ /g' | sed 's/\+/ /g'
14450000 M USB 0
En inderdaad werkt dat zoals ik het wil.
Grtz,
Ben