[bash] slim strings tokenizen

Pagina: 1
Acties:

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
Hoi


Ik heb een scriptje gebrouwen dat een variabele pakt in de vorm van:
domein1,domein2,domein3

<etc>

Nu wil ik dat die groep variabelen getokenized wordt (met de , als delimiter) en dan in een array(bij voorkeur wordt geplaatst). Ik weet niet hoeveel het er zijn, maar iig >0.

Dat kan met awk, zoals ik hier tegenkwam:

http://daemons.net/~matty/blog/?cat=89
code:
1
$ awk &#8216;BEGIN { i = 1 } { n = split($0,a,&#8221; &#8220;); while (i <= n) {print a[i]; i++;} }' text

Ik weet dan alleen niet hoe ik het in die bash-array krijg....

Wawt een andere methode is, is het aanrommelen met cut en dan een lusje schrijven, alleen gaat dat hier fout (eigen code.... en ben geen bash-1337):
code:
1
2
declare -i counter=0
result=`echo "domein1.tlddomein2.tld,domein3.tld" | cut -f $counter -d' '`


En dan die result=* in een lusje draaien en de counter ophogen. Echter moet ik hier de $ gaan escapen en dat werkt dus niet, ik heb al een aardig aantal varianten gebruikt.

Heeft iemand een goede tip? (oplossing is niet nodig, als ik maar beetje weet waar ik moet zoeken).


Ik heb dit al doorgelezen:
http://www.tldp.org/LDP/abs/html/escapingsection.html
http://www.tldp.org/LDP/abs/html/awk.html
Learning the Bash shell van O Reilly.
En deze ook natuurlijk:
http://www.tldp.org/LDP/abs/html/quoting.html

Zaram module kopen voor je glasvezelaansluiting?


  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Nu wil ik dat die groep variabelen getokenized wordt (met de , als delimiter) en dan in een array(bij voorkeur wordt geplaatst).
Het is in bash handiger om een spatie of tab als delimiter te gebruiken omdat dit de standaard field seperator is.

Je kan dit op twee manieren oplossen. De eerste is de komma te vervangen door een spatie. De tweede is om de komma (tijdelijk) als delimiter op te geven.
code:
1
2
3
4
5
6
#!/bin/sh
test=domein1,domein2,domein3
array=(${test//,/ })
IFS=, array2=($test)
echo ${array[0]} is hetzelfde als ${array2[0]}
echo ${array[2]} is hetzelfde als ${array2[2]}

  • Boudewijn
  • Registratie: Februari 2004
  • Niet online

Boudewijn

omdat het kan

Topicstarter
wow dank je wel.

Dom dat ik daar niet aan gedacht heb 8)7.... heb het namelijk wel gelezen.
Ik ga het even proberen :)

Zaram module kopen voor je glasvezelaansluiting?