Sonderzeichen ersetzen in sed - gibbet "Sondersonderzeichen" ???

  • Meinereiner mal wieder :gap


    Hat jemand ne Idee , wie man beispielsweise aus :


    <cmd irgendwo>"hallo" irgendwas </cmd>


    das :


    hallo


    mittels sed isolieren kann ?


    Lt man und help und diversen URLs is ja der Backslash dazu da , um Sonderzeichen ihre Funktion zu nehmen - fein , das funzt bei " , gelegentlich bei / und bei einem der beiden <> - abba in obigem Term krieg ich das </cmd> nur raus , wenn ich
    ..cmd\>
    ersetzen lasse - bei
    \<\/cmd\>
    tickt sed nich mehr sauber ....


    gibbet n Trick oder muß ich meine mittlerweile erstellten Variablen-zerleg-prüf-und-wieder-passend-zusammenbau-Scripte benutzen ?


    Das funzt , abba erscheint mir nich besonders elegant :whatever


    HJS

  • Hallo,


    mein (möglicherweise umständlicher) Ansatz:


    sed -e 's/<cmd .*>"//' -e 's/<\/cmd>//' -e 's/".*$//' test.txt


    (wobei test.txt den von Dir geposteten Text enthielt).


    Das mit \< und \> hab ich nachgelesen,
    diese zeichen stehen anscheinend für Anfang und Ende eines Wortes
    (leider keine Ahnung wie man dann matchen könnte).


    LG
    Armin

  • Moinsen hjs,


    Code
    echo '<cmd bla>"test" bla</cmd>' |sed -e 's/^.*>"\(.*\)" .*$/\1/'
    test

    Mit Hilfe unseres Linux-Cracks mal eben zusammengedängelt... :D


    Greetz

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

    Einmal editiert, zuletzt von kniepbert ()

  • Zitat

    Original von hjs
    <cmd irgendwo>"hallo" irgendwas </cmd>
    mittels sed isolieren kann ?


    Noch nicht so ganz, aber ein paar Tips:


    1. Kannst Du bei sed anstelle der üblichen "/" auch was anderes nehmen, z.B. "%"
    2. Kann sed nach regex suchen
    3. Kann sed mittels & und \1 ...\9 auf vorher gefundenes referenzieren


    Mit 3. kenne ich mich zu wenig aus, aber interessant ist schonmal das folgende:
    sed 's%\".*\"%<hier das richtige & bzw \1..9 rein>%g'



    Viel Erfolg!


    [EDIT] Zu spät.... [/EDIT]

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

    Einmal editiert, zuletzt von knebb ()

  • Hi,


    für ne genaue Antwort müsste ich erstma daheim in einem 500 Seiten Wälzer nachschauen. Daher erstmal nur der Hinweis: Die Argumente zu Befehlen werden zweimal interpretiert: Einmal durch die Shell, und dann erst durch den Befehl selbst. Die unterschiedlichen Mechanismen der jeweiligen Shell zur Interpretation von Strings machen die Sache z.T. arg kompliziert.
    Ein gängiges Beispiel dafür ist die Verwendung von samba Shares mit z.B. smbclient. Nach der Interpretation durch die Shell wird aus \\my\share \myshare. Daher muss man den Share so schreiben: \\\\my\\share.


    So ähnlich jedenfalls.


    --schmettow.


    [EDIT]Auch zu spät...[/EDIT]

    VDR 1.4.0 [dvd, dvdselect, mp3ng,remote, control, graphTFT, taste, tvonscreen, streamdev-server] - FW f32623
    OpenSuse 10.0 Vanilla 2.6.15.4 - vdrconvert - Noad
    Dign HV5, Asus P4P800 deluxe, Celeron M (silent modded) - TT 1.5 - Budget-S - AVBoard 1.3 - 12" TFT
    Peripherals: Kameleon 8060 - Philips DFR-9000 - Sharp 26GA4E - Pinnacle Showcenter 1000g

    Einmal editiert, zuletzt von schmettow ()

  • Hi,
    Möglichkeiten haste jetzt ja genug, daher nur noch was zur Ordnung:


    Ich schreibe die sed-Anweisungen inzwischen gar nicht mehr in den Befehl, sondern in eine Extra-Textdatei, die ich dann mit -f übergeben. Die Datei heißt bei mir dann einfach wie das Skript und .sed - ist nicht schön, aber man erspart sich das unübersichtliche Doppel-Interpretieren...

  • Oh Thx@all


    Den Punkt als Ersatz für die "bösen" Zeichen zu nehmen hab ich auch mal gefahren , abba das is mir nich so sympatisch , weil es die Möglichkeit einschließt , daß Zeilen berücksichtigt werden , die gar nicht berücksichtigt werden sollen - das Ergebnis wäre dann katastrophal .


    Der Grund ist einfach ( damit ihr auch wißt , warum ich so blöde Fragen stelle ) ;)


    Letztlich hat sich meine Scripterei im LFS Bereich ja nu soweit entwickelt , daß die Scripte die regelmäßig geänderten Sourcen des LFS-DEV Pfades erkennen und die eigentlichen Buildscripte entsprechend erstellen .


    Leider ändert sich ja auch gelegentlich was an den Patches und der Buildprozedur selbst ( mal n sed hier , mal eins da , mal n manuelles Copy hier und mal eins da ... )


    Während nicht gefundene Patches schlicht Fehler 2 ausspucken , nur das log etwas weniger elegant aussieht und das Ergebnis ansonsten das Gleiche bleibt , lassen nicht erfolgte seds und manuelle Copies das Ergebnis meist eher bescheiden aussehen .


    Was liegt im Zuge der Automatisierung also näher , als - neben der Sourcenerkennung - die .html des DEV-Books zu ziehen und diese als Basis zu Erstellung der Buildscripte zu nehmen .


    Das Ergebnis ist dann ein "hjslfs" , welches erst dann wieder bei der Erstellung stolpert , wenn die Jungs neue regeln für html einführen - und was will man mehr :D


    Zumal eine Scriptsammlung , die obigen Job beherrscht ohne jede Änderung auf jede beliebige LFS Version angewendet werden kann - ob 5.x oder 6.x oder was auch immer ...




    Die Variante aus ner Datei hab ich den man usw etc pp entnommen , aber bin gar nicht auf die Idee gekommen , daß die Ursache vielleicht an der "Vor"Interpretation durch die Shell liegen könnte - die Variante läßt hoffen :]


    Da werd ich wohl mal noch n auge drauf werfen ... :]


    HJS

  • Hi hjs,


    wenn Du statt .* ein .*? nimmst, brauchst Du keine Angst haben, dass er was überliest.
    Eine weitere Möglichkeit wäre \"[^"]* - was von einem Anführungszeichen alles nimmt, bis ein weiteres Anführungszeichen kommt.


    hth

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Zitat

    Original von geronimo
    Hi hjs,


    wenn Du statt .* ein .*? nimmst, brauchst Du keine Angst haben, dass er was überliest.


    Übersehen is nich ds Prob - bringt meist nur "Datei nich gefunden" , abba zuviel kicken is ungesund ;)


    Hähä - wenn man den Kruscht in ' ' setzt , erspart man sich das scriptfile ... <es geht voran> *träller*


    HJS

  • Zitat

    Original von geronimo


    Ähm - macht man das normalerweise nicht mit den Füßen? :mua


    Auch - abba mit den Füßen der Plastikpuppe an dem Tisch vor einem :P


    *wieder-in-den-Clinch-mit-den-Strings-geh*


    HJS

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!