Portál AbcLinuxu, 10. května 2025 05:44
$ 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:
eval $(echo "2.9.13aa" | sed -r 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/a=\1 b=\2 c=\3/')
#!/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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.