Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit sed Zeilenumbrüche nach einem String einfügen?
Hi,
ich will nach
<ServerStatus>(.*)<\/ServerStatus>
einen Zeilenumbruch einbauen leider bin ich nicht in der lage das zu machen
Ergebnis sollte das hier sein:
<ServerStatus>(.*)<\/ServerStatus>\n
Mein Versuch scheiterte leider kläglich ;-(
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
peschmae
02-01-2007, 16:58
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ä
tschloss
02-01-2007, 17:01
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
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
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 ;-)
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
tschloss
03-01-2007, 13:38
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
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 ;-)
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?
jo thx hast Recht das war nen Copy and Past Fehler ;-(. Habs oben ausgebessert.
mfg
wdsl
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.