(gelöst)problem mit sed wen ich in einer Variable / drine habe!

  • Ich versuche hier eine Datei anzugleichen die Zeilenweise eingelesen wird.
    Klappt auch so weit!
    nur wen in der Variable $ist oder $soll ein /dev oder in der Art Vorkommt versagt sed!
    Hier mal als Beispiel suchwort DVD mit der mit den setting
    value="/dev/hdb"
    nun soll in der anderen Datei in der Zeile mit dem Suchwort DVD die Variable
    value="/dev/hdc" in value="/dev/hdb" umgewandelt werden!
    Wen ich Ander trennzeichen nehme klappt das mit den Variablen nicht!
    Ich habe # bisher probiert andere haben überhaubt nicht gefunzt!


    such=DVD
    #############
    #soll=hdb #Hiermit geht´s
    #ist=hdc #
    #############
    soll="/dev/hdb"
    ist="/dev/hdc"
    echo $such ist value=$ist|sed -e /$such/s/value=$ist/value=$soll/


    Edit hier mal alles im zusammen hang!

    HauptVDR AMD Goede 1750 Easyvdr 0.06.4
    FF_TT2.3 Skystar2.6c 1x160GB + 1x1TB lautloser Rechner weil er im Keller steht. :D


    2x MediaMVP als Client+VOMPServer-Plugin


    TestVDR AMD Goede 1750 mit TT1.5 Easyvdr 06.*
    Bootet auf einer komischen Weise
    PicoPSU als NT

    3 Mal editiert, zuletzt von Dauser ()

  • Sorry - aber ich hab die Aufgabe/Frage noch nicht kapiert. Kannst du das nochmal erklären (besser) ?

  • Ohne die Aufgabe zu verstehen: dann nimm doch einen anderen Trenner. Zum Beispiel |.


    echo "/dev/saubloed" | sed -e 's|sau|ganz|'


    [EDIT]
    Mit Deinen Variablen also
    echo $such ist value=$ist | sed -e "s|value=$ist|value=$soll|"


    [EDIT2]
    Und wenn man die Definitionen alle liest, dann geht's auch mit "such", argnnn.
    [/EDIT2]
    [/EDIT]


    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

    2 Mal editiert, zuletzt von umaier ()

  • wie wärs denn hiermit


    #!/bin/bash
    such=DVD
    #############
    #soll=hdb #Hiermit geht´s
    #ist=hdc #
    #############
    soll="/dev/hdb"
    ist="/dev/hdc"
    echo $such ist value=$ist|sed s!value=$ist!value=$soll!g


    bei mir klappts


    gruß ingöö

    Wir lösen mit Computer Probleme, die wir ohne Computer gar nicht hätten.


    Software: easyVDR 0.8


    Hardware: DVB-S Fujitsu-Siemens FF 1.3; TechniSat SkyStar Budget; Futaba FVD; Atric IR-Einschalter

  • Bei mit garnicht immer wen ich in der Variable ein / dabei habe geht es nicht
    Ich habe mal das ganze oben angehängt!
    zu 90% wird abgeglichen nur nicht wen in der zeile ($ist oder $soll)ein /dev... oder so steht!
    Wechsel ich den Trenner geht es garnicht mehr.
    Die \ vor den = müssen wohl sein da sonst die Variable nicht ausgetauscht wird wen direkt hinter den $soll ein > in der Zeile steht!


    Edit
    echo "devsaubloed" | sed -e /dev/s/sau/ganz/ so gehts
    echo "devsaubloed" | sed -e |dev|s|sau|ganz| so nicht!
    Ich brauche schon das suchmuster!

    HauptVDR AMD Goede 1750 Easyvdr 0.06.4
    FF_TT2.3 Skystar2.6c 1x160GB + 1x1TB lautloser Rechner weil er im Keller steht. :D


    2x MediaMVP als Client+VOMPServer-Plugin


    TestVDR AMD Goede 1750 mit TT1.5 Easyvdr 06.*
    Bootet auf einer komischen Weise
    PicoPSU als NT

    Einmal editiert, zuletzt von Dauser ()

  • Zitat

    echo "devsaubloed" | sed -e "s|sau|ganz|"


    Und so tut das bei Dir wirklich nicht??? Die "Gänsefüsschen" sind wichtig!


    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • Die "/" müssen gequoted werden, mit einer Variablen geht das am einfachsten so:

    Code
    sed -i /${such//\//\\\/}/s/value\="${ist//\//\\\/}"/value\="${soll//\//\\\/}"/ /home/papa/Desktop/vdr-setup.xml

    Gruss
    SHF


  • cat /home/papa/Desktop/vdr-setup.xml|grep "\"$such\""|sed "s|value\="$ist"|value\="$soll"|"
    so gehts!Aber auch nur wen ich das mit >> in Datei eingebe gibt er mit nur die Zeilen die das suchwort drinne haben andere nicht.Damit ist die Datei unbrauchbar!


    @umair
    im Grunde geht es!Nur wen ich ein suchmuster mit angebe kann ich sed nur mit /
    dazu bewegen zu funzen!?


    SHF
    Es bringt keine Besserungen die / Variablen bleiben unberührt!


    vielleicht setze ich auf die möglichkeit mit grep $such vorran!


    Edit z:Z habe ich es so


    so funz es ABER er streamt nur die zu ändernen Zeilen!
    nicht die die keine Variablen beinhalten!
    nun muß ich das noch in die vdr-setup.xml ändern!

    HauptVDR AMD Goede 1750 Easyvdr 0.06.4
    FF_TT2.3 Skystar2.6c 1x160GB + 1x1TB lautloser Rechner weil er im Keller steht. :D


    2x MediaMVP als Client+VOMPServer-Plugin


    TestVDR AMD Goede 1750 mit TT1.5 Easyvdr 06.*
    Bootet auf einer komischen Weise
    PicoPSU als NT

    Einmal editiert, zuletzt von Dauser ()

  • ...und das hier?


    Code
    sed -i "\|$such ist value=|s|$ist|$soll|" /home/papa/Desktop/vdr-setup.xml


    Test:


  • tomas geil das haut hin!



    Aber was soll das \ vor dem |bewirken es macht doch das pipe Zeichen unwirksam oder nicht?
    Hauptsache so geht´s
    Danke Danke Danke!!

    HauptVDR AMD Goede 1750 Easyvdr 0.06.4
    FF_TT2.3 Skystar2.6c 1x160GB + 1x1TB lautloser Rechner weil er im Keller steht. :D


    2x MediaMVP als Client+VOMPServer-Plugin


    TestVDR AMD Goede 1750 mit TT1.5 Easyvdr 06.*
    Bootet auf einer komischen Weise
    PicoPSU als NT

  • Den \ vor dem altenativen Begrenzer brauchst du nur, wenn du dem Suchen und Ersetzen eine reine Mustersuche voranstellst.


    Beim Suchen und Ersetzen braucht man den \ für alternative Trennzeichen nicht!


    Wenn du also auf die erste Mustersuche verzichtest, geht es auch ohne \



    Code
    sed -i "s|$such ist value=$ist|$such ist value=$soll|" /home/papa/Desktop/vdr-setup.xml


    oder kürzer:


    Code
    sed -i "s|\($such ist value=\)$ist|\1$soll|" /home/papa/Desktop/vdr-setup.xml
  • Zitat

    Original von Dauser
    Es bringt keine Besserungen die / Variablen bleiben unberührt


    So sollte es dann aber eigentlich gehen. Ist jetzt aber egal...

    Code
    sed -i "/${such//\//\\\/}/s/value\=${ist//\//\\\/}/value\=${soll//\//\\\/}/" /home/papa/Desktop/vdr-setup.xml

    Gruss
    SHF


Jetzt mitmachen!

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