Zeilen löschen und ersetzen mit sed

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von h.nietnagel, 04.03.2011.

  1. #1 h.nietnagel, 04.03.2011
    h.nietnagel

    h.nietnagel Grünschnabel

    Dabei seit:
    28.07.2010
    Beiträge:
    9
    Zustimmungen:
    0
    ... sollte eigentlich ganz einfach sein. Dachte ich. Jetzt probiere ich schon seit mehr als einer Stunde an einem ganz simplen Problem herum:

    ich habe viiieeeele Textdateien, die alle nach dem selben Muster aufgebaut sind.
    Ich möchte in diesen mittels eines Shellskriptes und sed einige Zeilen löschen und in 2 Zeilen die Zahl "5" jeweils mit der Zahl "3" ersetzen.

    So sieht - nach vielem Lesen im Netz - mein Skript jetzt aus:
    Code:
    for i in *.prt; do
    sed -n '39,40!p' -e -n '48,49!p' -e '35s/5/3/g' -e '44s/5/3/g' $i > ${i%.*}edit.prt
    done
    
    Wenn ich das an einer Datei probiere, bekomme ich folgende Fehlermeldung:
    Code:
    sed: -e: No such file or directory
    sed: -n: No such file or directory
    sed: 48,49!p: No such file or directory
    sed: -e: No such file or directory
    sed: 35s/5/3/g: No such file or directory
    
    Wenn ich versuche, das aufzudröseln, dann kommt zwar keine Fehlermeldung:
    Code:
    for i in *.prt; do
    sed -n '39,40!p' -e -n '48,49!p' $i > ${i%.*}edit.prt 
    done
    
    aber mir die Datei inklusive Zeilen 39 und 40, und exklusive Zeilen 48 und 49 angezeigt. Ich dachte aber, dass, wenn ich das Löschen der beiden Zeilen (wie funktioniert bei sed eigentlich die Angabe von NICHT aufeinanderfolgenden Zeilen, also z.B. Zeile 39 und Zeile 48? Ich finde überall nur Hinweise auf: Zeilen 2 bis 20 usw.) in einem "Rutsch angebe", dann würden auch beide Angaben berücksichtigt.

    Kann mir jemand weiterhelfen? Was mache ich falsch, bzw. habe ich nicht richtig verstanden?


    Vielen Dank im Voraus für Tipps!

    Schöne Grüße,
    Hannes
     
  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. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Hallo Hannes,
    LÖSCHEN kannst Du auch zwei Zeilen gleichzeitig. Beispiel: Lösche Zeile 2 und 4, den Rest der Datei ausgeben:
    Code:
    sed -e '2d;4d' DATEI >NEUEDATEI
    
    Sieh es als Ansatz für Deine Gesamtlösung.
    Gruß zst
     
  4. #3 floyd62, 05.03.2011
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    zunächst einmal: wenn ich die Manual-Page richtig interpretiere musst du _alle_ sed-Befehle mit -e einleiten, wenn du mehrere kombiieren willst, da sonst nur der erste Ausdruck als Kommando, alle danach folgenden als Eingabedateien interpretiert werden. Das führt dann ganz klar zu den Fehlermeldungen wie '-e: no such file or directory'.

    Wenn ich das richtig verstehe, willst du
    - Zeilen 39 und 40 löschen
    - Zeilen 48 und 49 löschen
    - und in Zeile 35 und 44 alle '5' mit '3' ersetzen

    Das sollte eigentlich ganz systematisch etwa so umzusetzen sein:
    Code:
    sed -e '
            39,40d         # lösche Z. 39, 40,
            48,49d         # 48 und 49,
            35s/5/3/g      # und ersetze in Zeile 35
            44s/5/3/g'     # und 44 jeweils 5 durch 3
    ' $i > ${i%.*}edit.prt
    
    in einer Zeile also z.B.
    Code:
    sed -e '39,40d' -e '48,49d' -e '35s/5/3/g' -e '44s/5/3/g' ...
    
    oder
    Code:
    sed -e '39,40d; 48,49d; 35s/5/3/g; 44s/5/3/g' 
    
    Gruss, A.
     
  5. #4 h.nietnagel, 07.03.2011
    h.nietnagel

    h.nietnagel Grünschnabel

    Dabei seit:
    28.07.2010
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo floyd62,

    tausend Dank! Das war DIE Lösung! Und ich war soooo... nah dran! Ich hab wohl irgendwie beim Lesen der Beispiele im Netz übersehen, dass die Befehle, die alle zusammen in einem Rutsch ausgeführt werden sollen, innerhalb von EINEM Paar Hochkommata stehen müssen. Welch dummer Fehler von mir!

    Vielen Dank für die Hilfe! So hat alles wunderbar geklappt!


    Schöne Grüße,
    Hannes
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema: Zeilen löschen und ersetzen mit sed
Besucher kamen mit folgenden Suchen
  1. sed in zeile 3 ersetzen

    ,
  2. sed zeile mit variable ersetzen

Die Seite wird geladen...

Zeilen löschen und ersetzen mit sed - Ähnliche Themen

  1. Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen

    Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen: Hallo liebe Community. Habe ein kleines Problem und bin leider nicht so der Linux-Freak... Ich hoffe mal ihr könnt mir da vielleicht ein wenig...
  2. mit sed mehrere Zeilen löschen

    mit sed mehrere Zeilen löschen: Hallo, ich versuche aus einer Datei x Zeilen zu löschen, wobei x durch eine Variable definiert wird. Das Script soll in der BASH unter sun...
  3. Wie Zeilen mit weniger als 34 Zeichen aus einem Textfile löschen?

    Wie Zeilen mit weniger als 34 Zeichen aus einem Textfile löschen?: Ich möchte alle Zeilen mit weniger als 34 Zeichen aus einem Textfile löschen. Kennt jemand eine Möglichkeit über die Kommandozeile?
  4. awk/sed Zeilen bei der Uhrzeit 3 Minuten auseinanderliegt löschen

    awk/sed Zeilen bei der Uhrzeit 3 Minuten auseinanderliegt löschen: Hallo Leute, ich habe ein Problem mit einer Logdate. Ich prüfe mit einem Skript das ich laufen lasse alle 3 Minuten ob ein System noch online...
  5. datei auslesen und zeilen löschen

    datei auslesen und zeilen löschen: hallo leute :) hab ein kleines problem. ich hab ne datei auszulesen, in der bestimme daten gespeichert sind (mit zeitangabe). nun soll ich...