BASH / SED: substitute input aus datei holen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mrt181
Beiträge: 34
Registriert: 14.04.2007 19:23:45

BASH / SED: substitute input aus datei holen

Beitrag von mrt181 » 30.07.2008 12:14:06

Hallo,
ich möchte in einer for Schleife folgendes machen:

Code: Alles auswählen

for g in {1..10};do sed 's/"string  string"/"Input aus anderer Datei, zeilenweise"/' <$g/file.txt >$g/file.txt~;done
"Input aus anderer Datei, zeilenweise": Hier soll also der neue String aus einer anderen Datei kommen, aber für jede Iteration soll die nächste Zeile der Datei gewählt werden.

Habe mich mal an exec und read Anweisungen verursacht, es hat aber nicht "klick" gemacht.

Ich möcht im Grunde in mehreren Dateien einen bei allen Dateien gleichen String durch jeweils einen bestimmten anderen aus einer anderen Datei ändern, eine Art-Sammelbrief Funktion.

bye, Martin.
Bin newbie, arbeite aber daran :)

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: BASH / SED: substitute input aus datei holen

Beitrag von Meillo » 30.07.2008 12:55:17

mrt181 hat geschrieben:Ich möcht im Grunde in mehreren Dateien einen bei allen Dateien gleichen String durch jeweils einen bestimmten anderen aus einer anderen Datei ändern, eine Art-Sammelbrief Funktion.
Ich würde da mit awk ansetzen.
Hier mal "Pseudo-"Code:

Code: Alles auswählen

for g in `seq 10` ; do
  <"$g"/file.txt awk -v lineno="$g" '
    BEGIN {
        while (lineno-- > 0) {
            getline substitute_line <other_file
        }
    }
    /string string/{
       sub(/string string/, substitute_line);
    }
' >"$g"/file.txt~
done;
Achtung: Der Code wird so wohl nicht direkt funktionieren und vielleicht auch überhaupt gar nicht ;-)
Die AWK-Option '-v' ist vielleicht nur beim gawk verfügbar.
Use ed once in a while!

Antworten