Zeilen kopieren mit SED

Dieses Thema im Forum "Anwendungen" wurde erstellt von tsueri87, 10.08.2014.

  1. #1 tsueri87, 10.08.2014
    tsueri87

    tsueri87 Grünschnabel

    Dabei seit:
    10.08.2014
    Beiträge:
    1
    Zustimmungen:
    0
    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

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    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:
    309
    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

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. 2 Zeilen aus einer txt auslesen

    2 Zeilen aus einer txt auslesen: Hallo Leute, ich habe eine Datei die immer aus zwei zusammenhängenden Zeilen besteht, als Beispiel: DE0006231004 # 15,04 Infineon DE0005785604...
  4. Zeichen an Zeilenanfang für bestimmten Zeilenbereich einfügen

    Zeichen an Zeilenanfang für bestimmten Zeilenbereich einfügen: Hallo, ich würde gerne in einem Textdokument, z.B. von Zeile 10 - 18, an den Zeilenanfang ein # einfügen. Habe mir schon diverse Seiten zu SED...
  5. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...