$ echo -e '3xy004.08.xx.wav\nabc2.011.xx.wav' | sed "s#\([0-9]*[a-z]\+\)\([0-9]\+\)\.\([0-9]\+\).*#'\1' + '\2' + '\3'#"'3xy' + '004' + '08''abc' + '2' + '011'
P.S.: Beispiel 1. entspricht nicht deiner Spezifikation - ich hab daher mal anhand von Beispielen implementiert… (im Grunde entspricht kein Beispiel der Spezifikation - immerhin beginnt keines mit einem Punkt…)
file1=1k11.04.xx.wav s=${file1%%[^0-9]*}echo $s
file1=1k11.04.xx.wavs=${file1%\.[a-z,A-Z]*\.[a-z,A-Z]*}echo $s1k11.04
Quote from: "DonKult"P.S.: Beispiel 1. entspricht nicht deiner Spezifikation - ich hab daher mal anhand von Beispielen implementiert… (im Grunde entspricht kein Beispiel der Spezifikation - immerhin beginnt keines mit einem Punkt…)tuts doch - wenn man den . als beliebiges zeichen siehtansonsten wäre es \.
echo -e '3xy004.08.xx.wav\nabc2.011.xx.wav' | sed "s#.\([a-z]\+\)\([0-9]\+\)\.\([0-9]\+\).*#\1 \2 \3#" | while read line; do PART1="$(echo "$line" | cut -d' ' -f 1)" PART2="$(echo "$line" | cut -d' ' -f 2)" PART3="$(echo "$line" | cut -d' ' -f 3)" // do something fancy here instead of echo echo "## $PART1 ## PART2 ## $PART3 ##"doneOutput:## xy ## 004 ## 08 #### bc ## 2 ## 011 ##
Wenn ich dich richtig verstanden habe willst du den hinteren Teilstring .xx.wav abscheneiden. Das würde so gehen.
In diesem Falle wären die Beispielzerlegungen aber:(3 = .) 'xy' + '004' + '08'(a = .) 'bc' + '2' + '011'
Mit cut kann man im allgemeine viel machen. Je nachdem was du machen willst geht das eleganter/schneller mit "awk"…
[...]würd mich aber trotzdem interessieren, wie man alle Zeichen die in einer Liste sind hinten abschneidet${file1%[^0-9]*} killt nur das letzte${file1%%[^0-9]*} killt zu viele (auch Ziffern)Hermann
Guckst du hier