SED Hilfe

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Screamer, 01.12.2006.

  1. #1 Screamer, 01.12.2006
    Screamer

    Screamer Grünschnabel

    Dabei seit:
    01.12.2006
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,
    ich habe ein Problem, und zwar habe ich vor aus einer Datei (proxy.txt) jeweils Zeile für Zeile eine IP auszulesen welche ich dann mittels SED in probe.cfg einsetze.
    Mein Problem ist das in probe.cfg eine Zeile steht welche z.b. lautet: http_proxy:http://212.68.215.87:80/

    Jetzt will ich mit sed alles nach "http_proxy:" mit der neuen IP ersetzen... und das fortlaufend mit einer for Schleife...
    Meine aktuellster Versuch sieht so aus:

    Code:
    #!/bin/sh
    
    for I in 'cat proxy.txt'
    do
      sed 's/http_proxy.*$/'"$I"'/' probe.cfg
    done
    leider klappt dies aber nicht, da der sed befehl so wie er im code steht die gesamte zeile ersetzen würde, aber selbst das funktioniert nicht und ich glaube auch nicht das das so mit der Variablen funktioniert.......

    Vielleicht kann mir da jemand helfen bin halt leider neu auf dem Gebiet....:hilfe2:


    Grüßle
    Screamer
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 x-lette, 02.12.2006
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    Ganz banaler Ansatz:
    Code:
    #!/bin/sh
    for I in `cat proxy.txt` ; do
      echo http_proxy:${I} > probe.cfg
    done
    
     
  4. #3 Screamer, 03.12.2006
    Screamer

    Screamer Grünschnabel

    Dabei seit:
    01.12.2006
    Beiträge:
    5
    Zustimmungen:
    0
    hmm ich weiß eigentlich nicht wie das funktioniert....aber irgendwie scheint es erfolg zu haben.....
    aber nun steht nach script ende immer http_proxy:cat proxy.txt
    wieso ist das so??
    und wenn ich schreibe:
    Code:
    #!/bin/sh
    
    for I in 'cat proxy.txt'
    do
    
      echo http_proxy:${I} > probe.cfg
      more probe.cfg
    done
    
    ...gibt er mir nur einmal probe.cfg aus....obwohl er das doch viel öfters tun müsste....(solange wie IP adressen in proxy.txt stehen, oder??)

    Vielen Dank schonmal im voraus....


    Screamer
     
  5. #4 x-lette, 03.12.2006
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    Von deinem Beispiel ausgehend, unterstelle ich einfach mal, daß du einfache Anführungszeichen (ticks) und 'backticks' verwechselt hast. Backticks sind auf der Tastatur die einfachen Anführungszeichen mit <shift>. Je nach Tastaturbelegung mußt du danach die Leertaste drücken um das Zeichen zu bekommen, also <shift>+<'>, <space>
    Die Backticks schliessen ein Kommando ein und in der Ausgabe wird der Kommandostring durch die Ausgabe dieses Kommandos ersetzt.
    Siehe obiges Problem.

    Allerdings ist mir vielleicht ein kleiner Fehler unterlaufen, je nachdem, was du in proxy.txt haben willst.
    So wie das Kommando jetzt dasteht, wird die Datei bei jedem Schleifendurchlauf neu geschrieben. Die Zeilen werden also nicht angehängt!
    Um die Zeilen jeweils an die Datei anzuhängen mußt du '>' durch '>>' ersetzen.

    Gruß
    XL
     
  6. #5 Screamer, 03.12.2006
    Screamer

    Screamer Grünschnabel

    Dabei seit:
    01.12.2006
    Beiträge:
    5
    Zustimmungen:
    0
    jo super dankeschön ich hab da leider noch net so durchblick wegen ticks and backticks:O
    Eine Frage hab ich noch...und zwar wenn in der probe.cfg mehrere zeilen stehen und davon nur die zeile ersetzt werden soll welche mit http_proxy anfängt, funktioniert das doch nicht mit dem echo befehl nicht, weil dieser doch den rest der datei verwirft und nur die zeile einträgt, oder??

    Grüßle

    Screamer
     
  7. #6 x-lette, 03.12.2006
    x-lette

    x-lette Mitglied

    Dabei seit:
    23.04.2006
    Beiträge:
    44
    Zustimmungen:
    0
    Ort:
    Berlin
    Ich kenne den Aufbau dieser probe.cfg nicht. Die Variante mit 'echo' schreibt die komplette Datei neu.
    Wenn du in dieser Datei nur eine Zeile aktualisieren möchtest, mußt du tatsächlich mit 'sed' oder ähnlichem arbeiten.

    Code:
    #!/bin/sh
    for I in `cat proxy.txt` ; do
      sed s/http_proxy.*/http_proxy:${I}/ < probe_alt.cfg > probe_neu.cfg
    done
    
    Mußt mal nachschauen, wie 'sed' eine Datei direkt ändert, also ohne den Umweg über eine temporäre Datei. Ansonsten gilt auch hier: backticks um das Kommando im Schleifenkopf!

    Gruß
    XL
     
  8. #7 Screamer, 03.12.2006
    Screamer

    Screamer Grünschnabel

    Dabei seit:
    01.12.2006
    Beiträge:
    5
    Zustimmungen:
    0
    also ich komme dem ziel stückchen für stückchen näher...aber ich habe das gefühl das er die zeile nicht findet welche er ersetzen soll....

    mein aktuellstes skript sieht so aus:

    Code:
    #!/bin/sh
    
    for I in `cat proxy.txt`
    do
    
      sed s/^http_proxy.*/http_proxy:${I}/ probe.cfg
      more probe.cfg
      sleep 5
    done
    
    und die ausgabe sieht so aus

    Code:
    http_proxy:125.214.234.233:80
    http_proxy:192.17.239.250:68664
    http_proxy:156.108.28.187:80
    http_proxy:192.17.239.250:68664
    http_proxy:159.213.87.22:80
    http_proxy:192.17.239.250:68664
    
    sprich er setzt die variable $I schon zusammen aber in probe.cfg wird es nie eingetragen....woran kann das liegen??

    Grüßle

    Screamer
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Schlaubi_fi.de, 03.12.2006
    Zuletzt bearbeitet: 03.12.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Der Hintergrund, warum in probe.cfg nichts drinsteht ist, dass sed per default nichts innerhalb einer Datei ersetzt, sondern die Ersetzung nur auf Standard-Out ausgibt. Um dies zu erzwingen, musst Du entweder die Option -i angeben (bitte vorher Backup der Dateien machen!!) oder Du gehst über eine Tempdatei, so wie es mein Vorredner schon beschrieben hat...

    Schau Dir doch mal bitte die Man-Page von sed an, speziell die Option -i falls es die überhaupt bei deinem Sed gibt.
    Da Du Deine Sed Version hier nicht angegeben hast, kann auch keiner mit Sicherheit sagen, dass Dein Sed gewisse Optionen unterstützt.

    Was Du Dir für die Zukunft merken solltest, wenn Du hier postest, dass Du neben Shell- und Kommandoversion (also z.B. von bash und sed) auch immer den genauen Inhalt oder zumindest ein Beispielt Deiner Eingabedatei angibst und dazu schreibst, wie es im nachhinein aussehen soll - das erleichtert ungemein.

    Ferner benutzt Du einen sleep in Deinem Konstrukt, sleeps in einem Programm sind in den allerwenigsten Fällen nötig, als weg damit!

    Das more-Kommando kannst Du Dir ebenfalls sparen -> ebenfalls raus damit.

    Was mir noch einfällt: Statt einer for-Schleife könntest Du auch eine while-Schleife benutzen:
    Code:
    while read line; do echo $line; done < Eingabedatei.txt
     
  11. #9 Screamer, 03.12.2006
    Screamer

    Screamer Grünschnabel

    Dabei seit:
    01.12.2006
    Beiträge:
    5
    Zustimmungen:
    0
    vielen dank an euch zwei....hat nun endgültig geklappt der letzte fehler lag noch an dem -i......also vielen dank nochmal:)


    Screamer
     
Thema:

SED Hilfe

Die Seite wird geladen...

SED Hilfe - Ähnliche Themen

  1. Hilfe.

    Hilfe.: Hallo ich habe centos 7.2.15.11 Ich habe die .rpm Dateien von Epson direkt installiert, aber sonst nichts. Nachdem ich im Terminal...
  2. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  3. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...
  4. Benötige Hilfe- Dateien vergleichen

    Benötige Hilfe- Dateien vergleichen: Hallo, für eine Arbeit an der Uni muss ich einige viele Bilder miteinander vergleichen, was ich gerne durch eine Automatisierung etwas...
  5. Anfänger braucht Hilfe bei DVB-S Installation

    Anfänger braucht Hilfe bei DVB-S Installation: Hallo, ich habe ein Problem. Ich habe openSuse 13.2 frisch installiert. Jetzt soll ein usb-TV-Modul TEVII s660 funktionieren. Ich kann bereits...