Re: Sed Verständnisproblem
Am Donnerstag, 8. September 2005 20:22 schrieb Christian Frommeyer:
> Am Donnerstag 08 September 2005 19:31 schrieb Markus Schulz:
> > ich habe ein Problem mit sed. Ich versuche aus Zeichenketten
> > Leerzeichen zu entfernen, die sich nur zwischen kleinen Buchstaben
> >
> > dafür habe ich folgende Expressions:
> > sed -e 's/\([a-z]\)\W*\([a-z]\)/\1\2/g' \
> > -e 's/\([A-Z]\)\W*\([a-z]\)/\1\2/g'
>
> Also \W nimmt alle nicht alphanumerischen Zeichen. Wenn Du also nur
> Leerzeichen entfernen willst, vielleicht nicht was Du suchst.
>
> > echo "Bad Neu brandenburg" | sed -e
> > 's/\([a-z]\)\W*\([a-z]\)/\1\2/g' => Bad Neu brandenburg
> > ^^ funktioniert nicht mit den zwei Spaces.
>
> Da Du \W* schreibst nimmt er halt auch nichts. Dann matched sed erst
> "e" und "u" und geht dann weiter und findet "b" und "r". Die Paarung
> "u" und "b" mit den spaces dazwischen findet er so nicht.
hmm okay, das lässt sich sogar reproduzieren durch Anhängen von 2*n
Zeichen an "Neu" geht es nicht und bei 2*n+1 geht es.
Warum er aber nicht immer ein Zeichen in den Testbuffer dazunimmt,
sondern hier gleich zwei, erschließt sich mir nicht. Habe aber auch
selbst noch nie solch einen Erkennungsautomaten entwickelt.
> Weil sed -e kein "+" statt "*" kennt muß man das halt basteln:
> 's/\([a-z]\)\W\W*\([a-z]\)/\1\2/g'
>
> oder halt gleich:
> sed -r 's/([a-z])\W+([a-z])/\1\2/g'
okay, thx.
das reicht mir als Erklärung und Lösung :)
--
Markus Schulz
"Ein zukünftiges Start-up mit keinen eigenen Patenten wird gezwungen
sein, jeglichen Preis zu bezahlen, den die Branchenriesen ihm
auferlegen wollen. Der Preis könnte hoch sein: Etablierte Unternehmen
haben ein Interesse daran, künftige Konkurrenten auszuschließen."
Bill Gates (1991)
Reply to: