Re: sed: nach "../.." suchen
Hallo Jan.
On Fri, May 30, 2003 at 12:22:28AM +0200, Jan Schulz wrote:
> Wie bekomme ich sed dazu, aus
>
> classpath=/../../../../../usr/share/[file];/../../../../../usr/share/[file];[..]
> classpath=/usr/share/[file];/usr/share/[file];[..]
>
> zu machen?
Versuch's mal mit
sed 's:/\.\.::g'
oder wenn Du '/' als Trennzeichen fuer sed behalten willst (was
nicht unbedingt notwendig ist) mit "\/":
sed 's/\/\.\.//g'
$ echo 'classpath=/../../../../../usr/share/[file];' | sed 's:/\.\.::g'
classpath=/usr/share/[file];
Wenn Du die Punkte nicht maskierst, dann steht der Punkt fuer ein
beliebiges Zeichen. Das geht dann schief. Den "/" musst Du nur
maskieren, wenn Du / als Trennzeichen fuer sed verwenden willst.
> Und falls jemand gerade dabei ist: wie bekomme ich es hin, das alle
> /../../../../../usr/share/eclipse/plugins/<subdir>/bin; auch
> rausfallen?
Das kannst Du durch nichts ersetzen lassen:
sed 's:/\.\.::g; s:/usr/share/eclipse/plugins/[a-z]*/bin;::'
~~~ A ~~~~ ~~~ B ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Das ersetzt (A) zuerst "../" wie oben und (B) das andere. <subdir>
besteht dabei aus "[a-z]*", also keinem oder mehreren Kleinbuchstaben.
Wenn <subdir> Klein-, Grossbuchstaben und Zahlen enthalten kann, dann
kannst Du da "[0-9A-Za-z]*" oder "[[:alnum:]]*" nehmen.
$ echo 'foo/../../../../../usr/share/eclipse/plugins/subdir/bin;bar' | \
sed 's:/\.\.::g; s:/usr/share/eclipse/plugins/[a-z]*/bin;::'
ergibt "foobar".
P.S.: Das schoene an sowas ist, dass es mindestens mehrere
Moeglichkeiten gibt, das zu loesen ;-).
Tschuess,
Sebastian
Reply to: