Portál AbcLinuxu, 10. května 2025 05:44

Dotaz: Alternativa =~ m $1 v bashi/sedu?

29.1.2013 19:52 Dirka | skóre: 15 | blog: dirka12345
Alternativa =~ m $1 v bashi/sedu?
Přečteno: 270×
Odpovědět | Admin
cau,

je nak mozny dostat ze sedu jako navratovou hodnotu regulerniho vyrazu promenou pro kazdej match?

$ perl -e '$a="2.9.13aa"; $a =~ m/(\d+).(\d+).(\d+)/; print $1 . " " . $2 . " " . $3;' --> 2 9 13

$ echo "2.9.13aa" | sed -r 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 \2 \3/' --> 2 9 13

V perlu to dostanu do $1, $2, $3 a muzi s tim dale pracovat; v sedu/bashi bych chtel priradit \1, \2 a \3 do promenych najednou, tak abych nemusel prirazovat pro kazdej match zvlast, jde to nak?

dik

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Dirka (tazatel))
29.1.2013 21:14 l4m4
Rozbalit Rozbalit vše Re: Alternativa =~ m $1 v bashi/sedu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Semantic error. V sedu nejsou proměnné.

Proměnné do shellu na vlastní nebezpečí:
eval $(echo "2.9.13aa" | sed -r 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/a=\1 b=\2 c=\3/')
29.1.2013 22:12 darkenik
Rozbalit Rozbalit vše Re: Alternativa =~ m $1 v bashi/sedu?
$ echo 2.1.3-prev | ( IFS=. ;read a b c; echo "a=$a b=$b c=$c"; )

a=2 b=1 c=3-prev
29.1.2013 22:35 l4m4
Rozbalit Rozbalit vše Re: Alternativa =~ m $1 v bashi/sedu?
Jistě, pokud je to oddělené jednoduchým konstatním řetězcem, lze použít i word splitting...
29.1.2013 22:55 Dirka | skóre: 15 | blog: dirka12345
Rozbalit Rozbalit vše Re: Alternativa =~ m $1 v bashi/sedu?
diky za obe ukazky, ten priklad byl naschval jednoduchej, takze primarne me zajima vystup regexpu ze sedu
Řešení 1× (Dirka (tazatel))
30.1.2013 00:01 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Alternativa =~ m $1 v bashi/sedu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/bash
var="2.9.13aa"
if [[ "$var" =~ ([0-9]+)\.([0-9]+)\.([0-9]+).* ]]
then 
    echo -e "string: ${BASH_REMATCH[0]}\nfirst: ${BASH_REMATCH[1]}\nsecond: ${BASH_REMATCH[2]}\nthird: ${BASH_REMATCH[3]}"
fi

Taktiez aj v bash-i to ide velmi jednoducho a mozes s tym ihned dalej pracovat. Teda, az som to spravne pochopil, co vlastne chces. Ale vysledok tvojich prikladov a tohto je ten isty.

30.1.2013 17:23 Dirka | skóre: 15 | blog: dirka12345
Rozbalit Rozbalit vše Re: Alternativa =~ m $1 v bashi/sedu?
jj presne toto, ze to umi primo takhle pekne bash, sem vubec netusil. dik

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.