Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Mit sed Zeilenumbrüche nach einem String einfügen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.03.2002
    Beiträge
    32

    Mit sed Zeilenumbrüche nach einem String einfügen?

    Hi,
    ich will nach

    Code:
    <ServerStatus>(.*)<\/ServerStatus>
    einen Zeilenumbruch einbauen leider bin ich nicht in der lage das zu machen

    Ergebnis sollte das hier sein:

    Code:
    <ServerStatus>(.*)<\/ServerStatus>\n
    Mein Versuch scheiterte leider kläglich ;-(

    Code:
    echo "$belibigerString|sed \"s/(<ServerStatus>(.?)<\/ServerStatus>)/\1\n/g\""
    Ich habe volgende Fehlermeldung erhalten:

    /bin/sed: -e Ausdruck #1, Zeichen 45: invalid reference \2 on `s' command's RHS
    Hoffe ihr könnt mir helfen.

    vielen Dank
    wdsl

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Code:
    peschmae@sid:~$ echo 'jklö<ServerStatus>bbbb<\/ServerStatus>asdf' | sed 's#\(<ServerStatus>.*<\\/ServerStatus>\)#\1\n#'
    jklö<ServerStatus>bbbb<\/ServerStatus>
    asdf
    peschmae@sid:~$
    ist das das was du suchst?

    Änderungen:
    - die ( ) um das .? brauchst du nicht, und wenn schon sollte das vermutlich ein .* sein
    - die ( ) für die Backreference nachher musst du escapen: \( \)
    - statt / als trenner verwende ich in sed oft lieber # - dann musst du die / nicht escapen
    - das \ im Suchstring musst du aber in jedem Fall escapen - d.h. wenn du \ meinst musst du \\ schreiben

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.09.2004
    Ort
    Mannheim
    Beiträge
    102
    Es ist schwer erkennbar, was jetzt zu deinem Originaltext gehört und was schon regülärer Ausdruck.

    Jedenfalls musst du mit / \ ( etc. vorsichtig sein und diese ggf. maskieren.

    Möchtest du mal eine "echte" Zeile in "vor" und "nach" posten?

    /edit ... zuu langsam
    Greetz
    Thomas
    - Jabber-IM: tschloss-at-gmail.com -

  4. #4
    Registrierter Benutzer
    Registriert seit
    22.03.2002
    Beiträge
    32
    Hi,
    vielen Dank für die Hilfe es liegt wohl daran das ich die Klammern nicht Escaped habe dacht eigentlich das muss man machen wenn man sie als Suchstring verwenden will und nicht als Referenz:

    So sieht mein Code jetzt aus
    Code:
    sed 's#\(.*\)<ServerStatus>\(.*\)</ServerStatus>\(.*\)#\2#'
    Das ganze ist nen mehr oder weniger nen kleiner XML Parser (mit vorgegebener Syntax) und ich will da den Inhalt eines Elementes rausholen.

    Aussehen würde der Ursprungs String ungefähr so:

    <ServerStatus>hier steht irgend was</ServerStatus>
    Uhrsprünglich wollte ich nen Zeilenumbruch reinhauen das habe ich aber ganz einfach so gemacht ;-)

    Code:
    sed 's#</ServerStatus>#</ServerStatus>\n#'
    Das genügt meinen Bedürfnissen. Jetzt weis ich aber auch wie man Referenzen verwendet und das dürft mir viel Arbeit ersparen.

    vielen Dank
    wdsl
    Geändert von wdsl (03-01-2007 um 13:44 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.09.2004
    Ort
    Mannheim
    Beiträge
    102
    Zitat Zitat von wdsl Beitrag anzeigen
    Hi,
    vielen Dank für die Hilfe es liegt wohl daran das ich die Klammern nicht Escaped habe dacht eigentlich das muss man machen wenn man sie als Suchstring verwenden will und nicht als Referenz:

    So sieht mein Code jetzt aus
    Code:
    sed 's#\(.*\)<ServerStatus>\(.*\)</ServerStatus>\(.*\)#\2#'
    Das ganze ist nen mehr oder weniger nen kleiner XML Parser (mit vorgegebener Syntax) und ich will da den Inhalt eines Elementes rausholen.

    Aussehen würde der Ursprungs String ungefähr so:



    Uhrsprünglich wollte ich nen Zeilenumbruch reinhauen das habe ich aber ganz einfach so gemacht ;-)

    Code:
    sed 's#\</ServerStatus>#</ServerStatus>\n#'
    Das genügt meinen Bedürfnissen. Jetzt weis ich aber auch wie man Referenzen verwendet und das dürft mir viel Arbeit ersparen.

    vielen Dank
    wdsl
    Ah ok.
    Aber der "\" nach "s#" gehört da doch nicht hin, oder?
    Greetz
    Thomas
    - Jabber-IM: tschloss-at-gmail.com -

  6. #6
    Registrierter Benutzer
    Registriert seit
    22.03.2002
    Beiträge
    32
    jo thx hast Recht das war nen Copy and Past Fehler ;-(. Habs oben ausgebessert.

    mfg
    wdsl

Lesezeichen

Berechtigungen

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