PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einlesen von Dateien im "sed"



DieterH
17-05-2011, 20:19
Hallo,

ich habe eine Bibliothek von Textdateien erstellt, die bestimmte Daten enthalten. Aus diesen Grundbausteinen möchte ich komplexere Textdateien erstellen, die einerseits aufgabenspezifische Daten enthalten, in denen gleichzeitig aber auch die Inhalte der Grundbausteine eingebunden werden sollen, d.h. letztgenannte sollen wie bei "include"-Anweisungen eingebunden werden.

Gibt es sed-Befehle, mit denen man die die Inhalte untergeordneter Dateien in die übergeordnete Datei (genauer gesagt: in eine Kopie derselben) einfließen lassen kann? Die Verschachtelungstiefe ist 1 (nur eine Ebene untergeordneter Dateien)

Beispiel einer übergeordneten Datei:

Zeile 1
Zeile 2
Zeile 3
#include Datei-01
Zeile 4
Zeile 5
#include Datei-02

In diesem Beispiel ist "#include" die Anweisung, die auf untergeordnete Dateien Bezug nimmt. Die Anweisung selbst kann auch anders lauten.

Vielen Dank im voraus

Gruss
Dieter

Molaf
18-05-2011, 09:13
Hallo,

sind denn
Zeile 1
Zeile 2
Zeile 3
der Inhalt aus der untergeordneten Datei 'Datei-01' ?

Ansonsten wüßte ich gar nicht woher die Zeilen zwischen den includes herkommen.

Gruß,
Molaf

DieterH
18-05-2011, 11:02
Hallo Molat,

die Zeilen "Zeile 1", "Zeile 2" usw. stehen bereits in der übergeordneten Datei und sollen dort unverändert bleiben.

An die Stelle von "include Datei-01" usw. soll deren Inhalt eingefügt werden.

Gruß
Dieter

zenobic
24-05-2011, 22:39
So geht es statisch:


# ersetzt include in Datei-00 und schreibe nach file.out
sed "s/^#include Datei-01/`cat Datei-01`/" Datei-00 > file.out


dynamisch ist es etwas schwieriger :confused:



$ echo "Bla
#include \"test.in\"
BlaBla
" > file.in


So sollte es gehen, doch \1 wird nicht ersetzt:

$ sed "s/^#include \"\(.*\)\"/$(cat \\1)/" file.in


$ sed "s/^#include \"\(.*\)\"/cat \\1/" file.in
Bla
cat test.in
BlaBla





$ sed "s/^#include \"\(.*\)\"/$(date)/" file.in
Bla
Tue May 24 23:32:11 CEST 2011
BlaBla