Re: Sed Verständnisproblem
On Thursday 08 September 2005 21:49, Frank Dietrich wrote:
> Hallo Christian,
>
> Christian Frommeyer <debian@frommeyer.name> 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!
Reply to: