Anzeige:
Ergebnis 1 bis 7 von 7

Thema: sed/awk suchen ersetzen duch dateiinhalt

  1. #1
    EA80
    Gast

    Question sed/awk suchen ersetzen duch dateiinhalt

    hallo leute , ich habe ein kleines problem

    ich möchte mit sed oder awk einen string(IP adr) in einer datei durch den inhalt einer zweiten datei ersetzen.

    beispiel:
    sed -e 's/222.222.222.222 /111.111.111.111 /g' dateiname

    so wird in der datei die ip adr. 222.222.222.222 durch
    111.111.111.111 ersetzt. ich möchte aber die ip adr aus einer
    datei beziehen, die zb. ip_neu heisst und in der nur die neue
    ip steht.

    ich hab es mal mit quoten probiert

    sed -e 's/222.222.222.222 /`cat ip_neu` /g' dateiname
    aber das klappt mit sed nicht.

    kann mir da jemand helfen ????

  2. #2
    Senior Mitglied
    Registriert seit
    23.08.1999
    Beiträge
    132
    - Wenn du die Backticks absolut mit einfachen Hochkommata quotierst kann das nix werden. Deswegen Anführungszeichen nehmen

    - Zweitens wuerde ich Backticks nicht verwenden da man die zu leicht mal verwechselt nimm' lieber $(...) das ist übersichtlicher und verschachtelbar!

    also:
    Code:
    sed -e "s/222.222.222.222 /$(cat ip_neu)/g" dateiname
    gruß
    fork

  3. #3
    Registrierter Benutzer Avatar von Rebell
    Registriert seit
    10.07.2002
    Ort
    Dresden
    Beiträge
    62
    Ich hab folgendes versucht
    Code:
    sed --quiet -e "s/alter_key.crt/neuer_key.crt/ig" /etc/httpd/httpd.conf
    hat aber keine Veränderung durchgeführt...
    to be famous is so nice
    http://get-mike.de
    M:ke

  4. #4
    Registrierter Benutzer
    Registriert seit
    16.04.2002
    Beiträge
    20
    hai rebell,

    wenn ich dein prob richtig deute, dann hängt es daran, das "sed" files nicht in sich selbst verändert !

    du müsstest mit sed folgendes machen:
    # sed "s/alter_key.crt/neuer_key.crt/g" /etc/httpd/httpd.conf > /etc/httpd/httpd.conf.neu
    # mv /etc/httpd/httpd.conf.neu /etc/httpd/httpd.conf


    oder interaktiv am file selbst mit einem kleine
    "here-dokument" um einen editor wie vi/ex/ed:

    # ex /etc/httpd/httpd.conf << EOF
    > :s/alter_key.crt/neuer_key.crt/g
    > w
    > EOF

    und schon ist die datei selbst verändert.
    (OBACHT ! syntax-konvetionen beim here-document
    sind sehr wichtig !)

    gruss
    lankin

  5. #5
    Registrierter Benutzer Avatar von Rebell
    Registriert seit
    10.07.2002
    Ort
    Dresden
    Beiträge
    62
    Ok danke. Und wie ändere ich gefilterte Dateien? Angenommen ich möchte einen Pfad aller HTML-Dateien in einem Verzeichnis ändern.

    cat *.htm | sed -e "s/Bilder/neu\/bilder/g" > *.*

    Also ich möchte dass sed die Ausgabedatei mit der Eingabedatei überschreibt...
    (was so nicht möglich ist)
    to be famous is so nice
    http://get-mike.de
    M:ke

  6. #6
    Registrierter Benutzer
    Registriert seit
    16.04.2002
    Beiträge
    20
    hi rebell,

    du must die dateien nach dem verändern schon
    umkopieren. das direkte überschreiben beim
    (quasi) gleichzeitigen lesen könnte u.u. zu fatalen
    folgen führen. davon kann ich nur abraten.

    oder eben mit einem "here-document"
    (siehe 2. beispiel in der letzen mail)
    arbeiten. damit kannst du die files verändern
    ohne dich selbst um tmp-files kümmern
    zu müssen.


    ciao
    lankin

  7. #7
    Registrierter Benutzer
    Registriert seit
    16.04.2002
    Beiträge
    20
    kleine ergänzung,

    schon gefiltere dateien in einem separaten
    verzeichnis mit gleichen namen könntest du
    mit einer kleinen schleife überschreiben,
    damit die namen eindeutig bleiben.

    find . -name '*htm' |
    while read FILE
    do
    sed -e "s/Bilder/neu\/bilder/g" $FILE > ziel/$FILE
    done

    ciao
    lankin

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •