[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: