Hallo, Am Fri, 26 Aug 2005, Al Bogner schrieb: [..]
var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy"
varsortiert=`echo $var | sed -e 's/_xy$//' -e 's/_yz$//' -e 's/_/\n/g' | \ ^^ *GNA* Das ist nicht portabel. Das kann mein GNU-sed z.B. noch nicht!
sort -f | sed -e 's/^ *//' -e 's/ *$//'`
Ich habe die Leerzeichen-Entfernung nach Ende der Schleife gestellt um sicher zu sein, dass letztlich kein Leerzeichen übrigbleibt. Konkret ist alles um einiges komplexer.
echo $varsortiert Diese sollten sortiert werden Worte xy
Ergebnis sollte aber sein: Diese sollten sortiert werden Worte xy yz
$ var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy" $ varsortiert="`echo \"$var\" | tr '_' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" $ echo "'$varsortiert'" 'Diese sollten sortiert werden Worte xy yz' $ var="Diese_Worte_sollten_sortiert_ werden_xy_yz_xy _yz" $ varsortiert="`echo "$var" | tr '_' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" $ echo "'$varsortiert'" 'Diese sollten sortiert werden Worte xy xy yz' Statt dem '| xargs echo' am Ende geht auch: | tr '\n' ' ' Problem ist ggfs: $ var="Diese_Worte_sollten nicht _sortiert_ werden_xy_yz_xy _yz" $ varsortiert="`echo \"$var\" | tr '_' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" $ echo "'$varsortiert'" 'Diese solltennicht sortiert werden Worte xy xy yz' ^^^^^^^^^^^^ Da koennte man tr auch Leerzeichen durch Zeilenumbrueche ersetzen lassen: varsortiert="`echo \"$var\" | tr '_ ' '\n' | \ sed -e 's/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" Dank "xargs" braucht man im sed nichtmal die Leerzeilen zu loeschen, aber das ginge auch: varsortiert="`echo \"$var\" | tr '_ ' '\n' | \ sed -e '/^$/d;s/ //g;${/^\(xy\|yz\)$/d; };' | sort -f | xargs echo`" Beachte ausserdem _BITTE_ generell das Quoting, insbes. das foo="`echo \"$var\" | machwas`" ^^ ^^ ^^ ^^ das gilt uebrigens auch fuer andere Schreiberlinge hier in der Liste. HTH, -dnh -- Ugga Ugga ! Nognog! Dadadadada! [Woko° in dag°]