PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit sed Zeilenumbrüche nach einem String einfügen?



wdsl
02-01-2007, 15:05
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

wdsl
03-01-2007, 09:12
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?

wdsl
03-01-2007, 13:45
jo thx hast Recht das war nen Copy and Past Fehler ;-(. Habs oben ausgebessert.

mfg
wdsl