Anzeige:
Ergebnis 1 bis 12 von 12

Thema: sed: Doppelslash rauswerfen, wenn links kein Doppelpunkt steht

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719

    sed: Doppelslash rauswerfen, wenn links kein Doppelpunkt steht

    Ich hab ein kleines Problem mit sed:
    Ich verwende sed, um doppelte Slashes aus Pfadnamen zu entfernen. Die Pfadnamen können auch URLs sein. Ich verwende dazu den Befehl:
    Code:
     sed "s|//|/|g"
    Das Problem ist jetzt, das am Anfang einer URL gewöhnlich eine Protokollangabe steht, die durch einen Doppelslash vom Pafd getrennt wird. Durch meine Search & Replace-Aktion wird diese Angabe natürlich unbrauchbar. Kann ich das sed eventuell so bändigen, dass nur ersetzt wird, wenn links vom Doppelslash kein Doppelpunkt steht?

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    hier:

    sed -e "s|[^:]//|/|g"

    ersetzen nur wenn vor dem // kein : steht

    gruss

    Arthur
    ---------
    irc.mrunix.de #mrunix

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Hi,

    so sollte es gehn:

    Code:
    sed  's|[^:]//|/|g'
    Gruß micha
    IRC: irc.euirc.net #tux

  4. #4
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    ohne das ^ stimmts

    Steve
    pornstars-online.de

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Original geschrieben von Badsteve
    ohne das ^ stimmts

    Steve
    Nein, allerdings stimmt meins auch nicht, da zwar nicht ersetzt wird, wenn davor ein Doppelpunkt steht, bei allen anderen aber während der Ersetzung ein Zeichen verloren geht.

    Gruß micha
    IRC: irc.euirc.net #tux

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    oh, schon wieder eine Antwort. Das von micha ohne Dach funktioniert schonmal in dem einen Fall, aber ich hab das Gefühl, dadurch werden noch andere Sachen rausgeworfen, die eigentlich drinn bleiben sollten:
    Code:
    ..//
    wird zu
    Code:
    ./
    und das darf auf keine Fall passieren. Das ganze Skript, in dem das verbaut ist, erzeugt eine recht beachtliche Hierachie von relativen Pfadnamen, die kein Mensch so schreiben würde. Vielleicht gibt es ja in irgendeiner Programmiersprache, die ich in ein Bashscript einbinden kann, eine fertige Funktion oder so? Wie heist es denn jetzt richtig?

  7. #7
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    nimm meins dass solte doch funktionieren,
    kleiner aber feiner unterschied ' und "

    gruss
    Arthur
    nehm ich zurück
    Geändert von arthur (02-11-2003 um 17:42 Uhr)
    ---------
    irc.mrunix.de #mrunix

  8. #8
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Ja bei den bisherigen Vorschlägen wird das linke Zeichen, das kein Doppelpunkt ist gelöscht, deswegen muss man sich das merken und im 2. Teil der Ersetzung mit dazu packen, das geht mit Klammern die noch vor der Shell geschützt werden müssen( mit "\" ). Die Referenzierung des Wertes geht dann mit \1, \2, ... \9
    Code:
    echo "http:// this//that" | sed -e 's=\([^:]\)//=\1/=g'
    P. S.: Das Pipezeichen würde ich nicht unbedingt als Trenner verwenden, oder allgemein Metazeichen.

    Es geht auch ohne diese "Variablen" mit sogenannten Zusicherungen. ^ ist z. B. eine wenn es als String-/Zeilenanfang verwendet wird und steht für ein Element der Länge null. Leider weiss ich nicht ob das sed unterstützt. Stichwörter: positives/negatives Lookahead/Lookbehind
    Geändert von fork (02-11-2003 um 17:43 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    @arthur
    also deins wie es da steht mit den doppelten Hochkommata?

  10. #10
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    @ micha

    stimmt mein Fehler.

    Code:
    perl -pi~ -ne 's/(?<!:)\/\//\//ig;' datei
    :)
    pornstars-online.de

  11. #11
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Original geschrieben von fork
    Ja bei den bisherigen Vorschlägen wird das linke Zeichen, das kein Doppelpunkt ist gelöscht, deswegen muss man sich das merken und im 2. Teil der Ersetzung mit dazu packen, das geht mit Klammern die noch vor der Shell geschützt werden müssen( mit "\" )
    Mit Klammern gruppieren und mit \1 dazunehmen hatte ich gehabt, allerdings blieb das Ganze erfolglos, da ich die Klammern nicht geschützt hatte...
    Wieder was dazugelernt, thx.

    Gruß
    micha
    IRC: irc.euirc.net #tux

  12. #12
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Der Perllösung von Badsteve scheint ja angenommen worden zu sein, jedenfalls hat niemand wiedersprochen. Muss ich da noch was dran verändern, wenn ich die Daten über eine Pipe, und nicht als Dateinamen, reingeben will?

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •