Re: Sed Verständnisproblem
Hallo Michael, On Saturday 10 September 2005 11:21, Michael Bienia wrote: > On 2005-09-09 23:00:40 +0200, Gebhard Dettmar wrote: > > On Friday 09 September 2005 13:21, Michael Bienia wrote: > > > Wenn jetzt Perl mit dabei ist, dann sollte man auch die > > > Möglichkeiten der Perl Regex nutzen: > > > echo "Bad Ne u branden burg" |perl -pe > > > 's/(?<=[A-Za-z])\s+(?=[a-z])//g' > > > > Das sind aber extended Patterns. Die raff ich nicht (A zero-width > > positive look-behind assertion., les ich grade. Ah ja ;-) Und wie > > gehen deine beiden Ausdrücke zusammen? > > Also: ?<=[A-Za-z])\s+ heißt, wenn ich das Beispiel aus der manpage > > richtig übertrage: Ein oder mehr Leerzeichen, gefolgt von Groß- oder > > Kleinbuchstabe. > > Fast. Falsche Richtung, es ist eine Look-behind-Zusicherung. Ich schaue > links von einem oder mehr Leerzeichen, ob da ein Groß- oder > Kleinbuchstabe ist, ohne diesen Buchstabe zum Treffer zu zählen. > > > Und wie lese ich s+(?=[a-z]) > > Das ist eine Look-ahead-Zusicherung, ich schaue rechts vom einem oder > mehr Leerzeichen ob da ein Kleinbuchstabe folgt, wiederum ohne es zum > Treffer zu zählen. > > > Was meint "without including the tab in $&." in der Manpage (man > > perlre)? > > In $& (aka $MATCH) wird der letzte Treffer vom Pattern-Matching > gespeichert. Das bedeutet bei dem Beispiel aus der Manpage > "/\w+(?=\t)/", dass in $& nur das Wort (\w+) gespeichert wird, aber im > Suchtext ein Wort gefolgt von einem Tab enthalten sein muss. > > > Das einzige, was ich hier schnalle, ist, dass du nur Leerzeichen > > zwischen Kleinbuchstaben ersetzt, um BadN... zu vermeiden. > > Das Pattern nochmal kurz erklärt: > - suche nach einem oder mehr Leerzeichen: \s+ > - vor den Leerzeichen muss ein Groß- oder Kleinbuchstabe sein: > (?<=[A-Za-z]) > - nach den Leerzeichen muss ein Kleinbuchstabe sein > (?=[a-z]) > > Perl durchsucht jetzt den Suchstring nach einem oder mehr Leerzeichen, > für die die beiden Zusicherungen erfüllt sind. In $& haben wir dann nur > die Leerzeichen \s+, die Buchstaben gehören nicht dazu. > > Da der nachfolgende Buchstabe beim Suchen noch nicht verbraucht wurde > (wir haben ihn uns nur angesehen), kann Perl dort wieder ansetzen. > Genial, bin beeindruckt. Für die Erläuterung bin bestimmt nicht nur ich dir dankbar (dito für Frank) :-) > Michael Gebhard -- Caution: breathing may be hazardous to your health.
Re: Sed Verständnisproblem
On Friday 09 September 2005 13:21, Michael Bienia wrote: > On 2005-09-09 11:12:52 +0200, Gebhard Dettmar wrote: > > On Thursday 08 September 2005 21:49, Frank Dietrich wrote: > > Ich hätte es jetzt so gemacht: > > echo "Bad Ne u brandenburg" |perl -pe 's/\s\s{1,2}//g' > > oder mit zusätzlichen zufälligen leerzeichen zwischen Kleinbuchstaben > > echo "Bad Ne u branden burg" |perl -pe 's/\s+//g' |sed -e > > 's/\([a-z]\)\([A-Z]\)/\1 \2/' > > aber das ist natürlich geschummelt > > Wenn jetzt Perl mit dabei ist, dann sollte man auch die Möglichkeiten > der Perl Regex nutzen: > echo "Bad Ne u branden burg" |perl -pe > 's/(?<=[A-Za-z])\s+(?=[a-z])//g' Das sind aber extended Patterns. Die raff ich nicht (A zero-width positive look-behind assertion., les ich grade. Ah ja ;-) Und wie gehen deine beiden Ausdrücke zusammen? Also: ?<=[A-Za-z])\s+ heißt, wenn ich das Beispiel aus der manpage richtig übertrage: Ein oder mehr Leerzeichen, gefolgt von Groß- oder Kleinbuchstabe. Und wie lese ich s+(?=[a-z]) Was meint "without including the tab in $&." in der Manpage (man perlre)? Das einzige, was ich hier schnalle, ist, dass du nur Leerzeichen zwischen Kleinbuchstaben ersetzt, um BadN... zu vermeiden. > Michael Gebhard -- Q: What do you call a blind pre-historic animal? A: Diyathinkhesaurus. Q: What do you call a blind pre-historic animal with a dog? A: Diyathinkhesaurus Rex.
Re: Sed Verständnisproblem
Hallo Gebhard, Gebhard Dettmar <[EMAIL PROTECTED]> wrote: > On Friday 09 September 2005 13:40, Frank Dietrich wrote: > > Intern sieht das vereinfach so aus: > > F O O B A R FOOBAR > > |-- sed merkt sich diese Postion > > > > FO O B A R FOOBAR > > |-| das ist das nächste gefundene Pattern > > | > >|-- sed merkt sich diese Postion > > Das heißt, sed steht beim Leerzeichen zwischen FO O > und schnappt sich das nächste pattern, das durch die > Zeilenverkürzung erst O B ist? Ja. Er sieht so zusagen " O B A R FOOBAR" als noch zu bearbeitende Zeichenfolge. > Also letztlich als Regel: Dank der > bei jeder Ersetzung entstehenden Zeilenverkürzung entgeht ihm jedes > Zweite? und Perl hat eine andere regex-Maschine, die dieses Problem > nicht hat? Kenne mich mit Perl leider nur sehr wenig aus (eigentlich fast garnicht). Es könnte aber durchaus sein, das Perl bei der Option "ersetze alle" die Wiederholungen (also Label x und tx, im sed) von Haus aus macht. Da müsste man mal auf einer Perl-Liste nachfragen. Frank -- Ist das jetzt ein Klischee, daß überall auf der Welt erfolgreichen Nerd-Programmierer allein in ihrem stillen Kämmerchen sitzen und sich alles völlig allein aus irgendwelchen Handbüchern beibringen?
Re: Sed Verständnisproblem
hallo Frank, Super, vielen Dank. Ich frag zur Sicherheit nochmal nach, s.u. On Friday 09 September 2005 13:40, Frank Dietrich wrote: > Hallo Gebhard, > > > > [...] > > Angenommen Du sollst in einem Text "alle F O O B A R und FOOBAR in > Foobar wandeln. > Dann könnte man es in Pseudocode so lösen (dient nur als Beispiel, > und ist deshalb nur auf diesen einen Fall zugeschnitten): > - zuerst alle einzelnen Leerzeichen zwischen zwei Großbuchstaben > löschen > - dann alle FOOBAR durch Foobar ersetzen > > # alle einzelnen Leerzeichen zwischen zwei Großbuchstaben löschen > echo "F O O B A R FOOBAR" | sed -e 's/\([A-Z]\) \([A-Z]\)/\1\2/g' > Das geht deswegen schief, weil sich die Zeile während der > Bearbeitung verkürzt. > > Intern sieht das vereinfach so aus: > F O O B A R FOOBAR > > |-- sed merkt sich diese Postion > > FO O B A R FOOBAR > > |-| das ist das nächste gefundene Pattern > | >|-- sed merkt sich diese Postion Das heißt, sed steht beim Leerzeichen zwischen FO O und schnappt sich das nächste pattern, das durch die Zeilenverkürzung erst O B ist? Also letztlich als Regel: Dank der bei jeder Ersetzung entstehenden Zeilenverkürzung entgeht ihm jedes Zweite? und Perl hat eine andere regex-Maschine, die dieses Problem nicht hat? > > FO OB A R FOOBAR > > |-| das ist das nächste gefundene Pattern > > FO OB AR FOOBAR > und das kommt als Ergebnis raus > > [...] Rest klar > > Hoffe noch ein wenig Licht ins Dunkel gebracht zu haben. Ja, ich dank dir sehr > Frank Gebhard
Re: Sed Verständnisproblem
Hallo Gebhard, Gebhard Dettmar <[EMAIL PROTECTED]> wrote: > On Thursday 08 September 2005 21:49, Frank Dietrich wrote: > > Mein Vorschlag wäre: > > sed -e ':x;s/\(.*[A-Za-z]\) \+\([a-z]\)/\1\2/g;tx' > > > > :x - setzt ein Label > > > > s/\(.*[A-Za-z]\) \+\([a-z]\) - findet "[A-Z] [a-z]" und > > "[a-z] [a-z]", mit " " >=1 dazwischen, > > durch das ".*"es wird immer nach dem am weitesten rechts > > liegende Pattern gesucht > > \1\2 - dürfte klar sein > > tx - wird das angegebene Pattern gefunden wird am Label x > > fortgesetzt > > > > Ich hoffe die Erklärung ist leicht verständlich. ;-) > > Nicht ganz. Das \+ (bzw. das Quoting vor dem +) verstehe ich nicht Wurde von Mario schon erläutert. > und die Erklärung zu Labels in der sed manpage ( Label for b and t > commands???) auch nicht ;-( Es wird sicher leichter verständlich wenn man die Anweisungen nicht auf eine Zeile pappt sondern diese mittels einem Skript an sed übergibt. Angenommen Du sollst in einem Text "alle F O O B A R und FOOBAR in Foobar wandeln. Dann könnte man es in Pseudocode so lösen (dient nur als Beispiel, und ist deshalb nur auf diesen einen Fall zugeschnitten): - zuerst alle einzelnen Leerzeichen zwischen zwei Großbuchstaben löschen - dann alle FOOBAR durch Foobar ersetzen # alle einzelnen Leerzeichen zwischen zwei Großbuchstaben löschen echo "F O O B A R FOOBAR" | sed -e 's/\([A-Z]\) \([A-Z]\)/\1\2/g' Das geht deswegen schief, weil sich die Zeile während der Bearbeitung verkürzt. Intern sieht das vereinfach so aus: F O O B A R FOOBAR |-- sed merkt sich diese Postion FO O B A R FOOBAR |-| das ist das nächste gefundene Pattern |-- sed merkt sich diese Postion FO OB A R FOOBAR |-| das ist das nächste gefundene Pattern FO OB AR FOOBAR und das kommt als Ergebnis raus Lösung bringt hier die mehrmalige Wiederholung des sed Kommandos. Oder als Pseudocode: - wiederhole solange bis das Pattern nicht mehr gefunden wird Als Skript lässt sich das dann so schreiben: --- sample.sed --- :x-- Label x s/\([A-Z]\) \([A-Z]\)/\1\2/g -- das auszuführende Kommando t x -- wenn durch das s Kommando etwas getauscht wurde, letzte Zeile nochmal einlesen und Abarbeitung bei Label x fortsetzen ansonsten nächstes Kommando abarbeiten s/FOOBAR/Foobar/g -- ersetzt alle FOOBAR durch Foobar -- Aufgerufen wird das dann so: echo "F O O B A R FOOBAR" | sed -f sample.sed Intern passiert dann folgendes: Ausgangszeile F O O B A R FOOBAR nach dem ersten Durchlauf, enthält die Zeile FO OB AR FOOBAR da eine Ersetzung erfolgt ist wird mit dieser Zeile nochmal ein Durchlauf gestartet, danach sieht die Zeile so aus FOOBAR FOOBAR da eine Ersetzung erfolgt ist ("O O" und "B A") wird mit dieser Zeile nochmal ein Durchlauf gestartet FOOBAR FOOBAR nach diesem Durchlauf wurde keine Ersetzung mehr durchgeführt, d.h. "t x" springt nicht mehr zum Label x und s/FOOBAR/Foobar/g wird ausgeführt Da es sich um ein relativ kurzes sed-Skript handelt kann man die Kommandos auch mit ";" getrennt auf eine Zeile schreiben und sed mit "-e" übergeben. Bei komplexeren Skripten leidet da natürlich die Lesbarkeit und Fehler lassen sich auch nicht mehr so einfach finden. Hoffe noch ein wenig Licht ins Dunkel gebracht zu haben. Frank -- If code looks clumsy, it can usually be better written. Clean code is more easily maintainable and modifiable.
Re: Sed Verständnisproblem
Gebhard Dettmar <[EMAIL PROTECTED]> wrote: > Nicht ganz. Das \+ (bzw. das Quoting vor dem +) verstehe ich nicht und die sed versteht eigentlich nur regex, + ist eregex. Deshalb \+ - quasi als Transition von eregex features nach regex. regards Mario -- User sind wie ideale Gase - sie verteilen sich gleichmaessig ueber alle Platten -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)
Re: Sed Verständnisproblem
On Thursday 08 September 2005 21:49, Frank Dietrich wrote: > Hallo Christian, > > Christian Frommeyer <[EMAIL PROTECTED]> wrote: > > [...] > > oder halt gleich: > > sed -r 's/([a-z])\W+([a-z])/\1\2/g' > > Geht aber z.B. bei "Bad Ne u brandenburg" auch nicht, weil > > Bad Ne u brandenburg > > |--| > > 1. gefundene Stelle, wird ersetzt durch "eu" > dann sieht der pattern space im sed so aus > Bad Neu brandenburg > > |- ab hier wird dann weiter gesucht > > Damit wird das Pattern nicht mehr gefunden und "u b" somit > nicht ersetzt. Das Problem lässt sich aber itterativ lösen. > > Mein Vorschlag wäre: > sed -e ':x;s/\(.*[A-Za-z]\) \+\([a-z]\)/\1\2/g;tx' > > :x - setzt ein Label > > s/\(.*[A-Za-z]\) \+\([a-z]\) - findet "[A-Z] [a-z]" und > "[a-z] [a-z]", mit " " >=1 dazwischen, > durch das ".*"es wird immer nach dem am weitesten rechts liegende > Pattern gesucht > \1\2 - dürfte klar sein > tx - wird das angegebene Pattern gefunden wird am Label x fortgesetzt > > Ich hoffe die Erklärung ist leicht verständlich. ;-) Nicht ganz. Das \+ (bzw. das Quoting vor dem +) verstehe ich nicht und die Erklärung zu Labels in der sed manpage ( Label for b and t commands???) auch nicht ;-( Ich hätte es jetzt so gemacht: echo "Bad Ne u brandenburg" |perl -pe 's/\s\s{1,2}//g' oder mit zusätzlichen zufälligen leerzeichen zwischen Kleinbuchstaben echo "Bad Ne u branden burg" |perl -pe 's/\s+//g' |sed -e 's/\([a-z]\)\([A-Z]\)/\1 \2/' aber das ist natürlich geschummelt > > Frank Gruß Gebhard -- Never give an inch!
Re: Sed Verständnisproblem
Hallo Markus! On Thu, 8 Sep 2005 20:28:12 +0200 Markus Schulz <[EMAIL PROTECTED]> wrote: >aber warum geht das mit extended regexp style und mit normalen nicht? Bin mir nicht sicher, aber ich meine die '\1\2' gehören zu extended. Gruß, Martin -- .--. |o_o | __ _Powered by |:_/ |/ / (_)___ __ __ __ // \ \ / / / // __ \/ / / / \/ / (| | )/ /__/ // / / / /_/ / > < /'\_ _/`\ //_//_/ /_/_/ /_/\_\ \___)=(___/ pgpK7Qn8GgF1m.pgp Description: PGP signature
Re: Sed Verständnisproblem
Hallo Christian, Christian Frommeyer <[EMAIL PROTECTED]> wrote: > Am Donnerstag 08 September 2005 19:31 schrieb Markus Schulz: > > 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. > 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' Geht aber z.B. bei "Bad Ne u brandenburg" auch nicht, weil Bad Ne u brandenburg |--| 1. gefundene Stelle, wird ersetzt durch "eu" dann sieht der pattern space im sed so aus Bad Neu brandenburg |- ab hier wird dann weiter gesucht Damit wird das Pattern nicht mehr gefunden und "u b" somit nicht ersetzt. Das Problem lässt sich aber itterativ lösen. Mein Vorschlag wäre: sed -e ':x;s/\(.*[A-Za-z]\) \+\([a-z]\)/\1\2/g;tx' :x - setzt ein Label s/\(.*[A-Za-z]\) \+\([a-z]\) - findet "[A-Z] [a-z]" und "[a-z] [a-z]", mit " " >=1 dazwischen, durch das ".*"es wird immer nach dem am weitesten rechts liegende Pattern gesucht \1\2 - dürfte klar sein tx - wird das angegebene Pattern gefunden wird am Label x fortgesetzt Ich hoffe die Erklärung ist leicht verständlich. ;-) Frank -- A: Because it breaks the logical sequence of discussion Q: Why is top posting bad?
Re: Sed Verständnisproblem
Am Donnerstag 08 September 2005 20:56 schrieb Markus Schulz: > 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. Naja, er sucht das erste, was auf das Muster passt. das ist nach "Bad" dann "eu" das ersetzt er (halt wieder mit "eu") und das nächste was passt (muss ja mit einem Kleinbuchstaben anfangen) ist dann "br". Die Paarung die er eigentlich finden soll findet er deshalb nicht. Das käme wohl auch zu komischen Resultaten, wenn man beim ersetzten immer wieder darauf achten müsste, das das Suchmuster nicht zufällig wieder passt. Gruß Chris -- A: because it distrupts the normal process of thought Q: why is top posting frowned upon
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)
Re: Sed Verständnisproblem
Am Donnerstag, 8. September 2005 20:13 schrieb Martin Grandrath: > Hallo Markus! > > On Thu, 8 Sep 2005 19:31:35 +0200 Markus Schulz <[EMAIL PROTECTED]> wrote: > >sed -e 's/\([a-z]\)\W*\([a-z]\)/\1\2/g' \ > > -e 's/\([A-Z]\)\W*\([a-z]\)/\1\2/g' > > Versuch doch mal > > sed -r -e 's/([A-Za-z])\W*([a-z])/\1\2/g' danke erstmal. aber warum geht das mit extended regexp style und mit normalen nicht? eine Lösung von Wolfgang Ulmer (private Mail) war mit Word-Boundarys (\b) vor und hinter dem \W* zu arbeiten. Das funktioniert auch ohne extended Style, verstehen tut er (und ich) das aber auch nicht. -- Markus Schulz > >Is that verb regular? Does "ich kann den Mond sprengen" sound less > >awkward than "ich kann den Mond explodieren" ? > The first sentence is correct, the second one is just nonsense. But you will need quite a big amount of explosives to do so. I'm sure America has plenty. :)
Re: Sed Verständnisproblem
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. 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' Gruß Chris -- A: because it distrupts the normal process of thought Q: why is top posting frowned upon
Re: Sed Verständnisproblem
Hallo Markus! On Thu, 8 Sep 2005 19:31:35 +0200 Markus Schulz <[EMAIL PROTECTED]> wrote: >sed -e 's/\([a-z]\)\W*\([a-z]\)/\1\2/g' \ > -e 's/\([A-Z]\)\W*\([a-z]\)/\1\2/g' Versuch doch mal sed -r -e 's/([A-Za-z])\W*([a-z])/\1\2/g' Gruß, Martin -- .--. |o_o | __ _Powered by |:_/ |/ / (_)___ __ __ __ // \ \ / / / // __ \/ / / / \/ / (| | )/ /__/ // / / / /_/ / > < /'\_ _/`\ //_//_/ /_/_/ /_/\_\ \___)=(___/ pgpLAONwR3Is2.pgp Description: PGP signature
Sed Verständnisproblem
Hallo, ich habe ein Problem mit sed. Ich versuche aus Zeichenketten Leerzeichen zu entfernen, die sich nur zwischen kleinen Buchstaben bzw. vor Whitespace ein Großbuchstabe und hinter ein Kleinbuchstabe. Z.B. "Bad Hers feld" => Bad Hersfeld "B ad Hers feld" => Bad Hersfeld usw. 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' und das funktioniert leider sehr eigenartig. z.B. (zweite expression mal weggelassen, da egal) echo "Bad Hers feld" | sed -e 's/\([a-z]\)\W*\([a-z]\)/\1\2/g' => Bad Hersfeld ^^ funktioniert wie erwartet. echo "Bad Neu brandenburg" | sed -e 's/\([a-z]\)\W*\([a-z]\)/\1\2/g' => Bad Neu brandenburg ^^ funktioniert nicht mit den zwei Spaces. echo "Bad Neus brandenburg" | sed -e 's/\([a-z]\)\W*\([a-z]\)/\1\2/g' => Bad Neusbrandenburg ^^ funktioniert eigenartiger Weise, obwohl auch zwei Spaces und nur ein 's' an Neu angehangen... da ist doch irgendwie der Wurm drin?!? Jemand eine Idee? -- Markus Schulz This is Linux Land- In silent nights you can hear the windows machines rebooting