Zeilen kopieren mit SED

Diskutiere Zeilen kopieren mit SED im Anwendungen Forum im Bereich Linux/Unix Allgemein; Hallo liebe Forumsleute ich bin noch relativ unerfahren mit der Shell und bin aber fleissig am Experimentieren und Lösungen für meine Probleme...

  1. #1 tsueri87, 10.08.2014
    tsueri87

    tsueri87 Guest

    Hallo liebe Forumsleute

    ich bin noch relativ unerfahren mit der Shell und bin aber fleissig am Experimentieren und Lösungen für meine Probleme zu finden. Nun stehe ich aber bei einem Problem an, bei dem ihr mir hoffentlich weiterhelfen könnt.

    Aufgabe: Ich muss in rund 1000 xml-Dateien jeweils zwei Zeilen verschieben. Alle Dateien sind gleich strukturiert, von daher sollte es also keine Probleme geben. Und zwar geht es darum, dass ich die Zeile 20 auf die Zeile 8 kriege. Die Originaldatei sieht folgendermassen aus:

    Originaldatei:
    1 ?xml version="1.0" encoding="UTF-8"?>
    2 <document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3 xsi:noNamespaceSchemaLocation="vorlage.dtd">
    4 <meta>
    5 <id>200455</id>
    6 <author></author>
    7 <url></url>
    8 <date></date>
    [...]
    19 <text>
    20 <date>1941-06-01</date>

    Ich hab dazu ein sed-Script mit Hilfe vieler Forenbeiträge gebastelt, aber irgendwie funktioniert es nicht:

    Code:
    for file in *.xml; do sed -i -f -e '20{h;d}' -e '8g' $file; done
    Wenn ich es laufen lasse, dann krieg ich folgende Fehlermeldung:

    sed: 1: "20{h;d}
    ": extra characters at the end of d command

    Kann mir jemand weiterhelfen? Ich hab schon einiges ergoogelt, steh aber voll auf dem Schlauch :s.
    Danke schon zum Voraus!
    LG Tsueri
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 floyd62, 11.08.2014
    floyd62

    floyd62 Routinier

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

    sicher, dass da keine nicht druckbaren Zeichen in deinem Skript enthalten sind? Eigentlich läuft das Skript bei mir ohne Fehlermeldung (wenn ich die Option '-f' weglasse - die brauchst du nur, wenn du die sed-Befehle nicht mit '-e' auf der Kommandozeile angibst sondern aus einem sed-Skript liest.)

    Dass das trotzdem nicht das gewünschte Ergebnis liefert, liegt daran, dass sed zeilenweise arbeitet; in Zeile 8 ist der Hold-Buffer aber noch leer, du bekommst mit dem 'g' also nur eine zusätzliche Leerzeile, nicht die Zeile 20, die erst später wegkopiert und gelöscht wird.

    Für solche Fälle ist evtl. 'ed' einfacher, etwa so:
    Code:
    for xml in *.xml; do
            ( echo 20m7; echo wq ) | ed $xml
    done
    
    Gruss, A.
     
Thema: Zeilen kopieren mit SED
Besucher kamen mit folgenden Suchen
  1. in linux zeilen verschieben

Die Seite wird geladen...

Zeilen kopieren mit SED - Ähnliche Themen

  1. kopieren von bestimmten zeilen

    kopieren von bestimmten zeilen: hallo, ich brauche dringend hilfe! und zwar: möchte bestimmte zeilen aus einer in die andere datei kopieren mithilfe unixbefehlen und schaffe...
  2. Datei Einlesen, Zeilen in neue Datei kopieren, und dabei noch zeilen hinzufügen.

    Datei Einlesen, Zeilen in neue Datei kopieren, und dabei noch zeilen hinzufügen.: Hi, ich suche zur Zeit nach einem Skript, dass folgendes Dateischema einliest: Zeile 1 { Zeile 2 Zeile 3 Zeile 4 Zeile 5 } Davon...
  3. perl: Zusammenführen von Zeilen, die mit Leerzeichen beginnen.

    perl: Zusammenführen von Zeilen, die mit Leerzeichen beginnen.: Hallo, Hintergrund: Das LDIF-Format trennt Zeilen, die größer als 80 Zeichen sind und schreibt in die nächste Zeile ein Leerzeichen. Beispiel:...
  4. Zeilen-übergreifend zwischen {....} filtern

    Zeilen-übergreifend zwischen {....} filtern: Hallo in einer Datei können Flags vergeben werden. es können x-Flags vergeben werden die innerhalb von {zeile, zeile} stehen. Ich möchte eine...
  5. Zeilen behalten, die Werte in einem bestimmten Bereich enthalten

    Zeilen behalten, die Werte in einem bestimmten Bereich enthalten: Hallo, ich habe eine Datei mit 4 Spalten, in denen Zahlenwert liegen. Ich möchte gerne alle Zeilen behalten, bei denen der Wert in der dritten...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden