Eine Zeile ändern

Hallo allerseits,

folgendes Problem: Ich habe hier eine große (>100MB) Datei, die zuerst aus ein paar Zeilen Text und danach aus vielen, vielen Binärdaten besteht. Nun muß ich in der dritten Zeile, die nur eine Zahl enthält, eben jene Zahl ändern. Wie mache ich das effektiv?

Mit sed klappt es zwar, aber es dauert zu lange, weil ja die ganze Datei durchgekämmt wird. Da ich diese Operation sehr oft und auf vielen Dateien machen muß, wäre es schön, wenn es eine schnellere Lösung gäbe.

Hat jemand von Euch eine Idee? Vielleicht gibt es ja etwas Perl-Vodoo, aber da bin ich leider völlig unbewandert.

Viele Grüße,

Peter

Hi Peter, kann die Zahl dabei grösser werden? (also zB dass vorher „2“ und dann „15“ drinnensteht) wenn dem nämlich so ist, denke ich wird sich ein verschieben der restlichen Datei um genau dieses hinzugekommene Zeichen nicht verhindern lassen (egal mit welchem Tool)
Wenn ich nur vorhandene Zeichen durch andere ersetzen soll (also zB „02“ durch „15“) dann sollte es meiner Meinung nach lösbar sein.

Bin mir ziemlich sicher dass es so ist, aber wenn jemand besser Bescheid weiss, ich lerne immer wieder gern was dazu :wink:

MfG Daniel

Hi Daniel,

Hi Peter, kann die Zahl dabei grösser werden? (also zB dass

Nein, es ist jedesmal eine vierstellige Zahl.

Wenn ich nur vorhandene Zeichen durch andere ersetzen soll
(also zB „02“ durch „15“) dann sollte es meiner Meinung nach
lösbar sein.

Das wäre schön :smile:

Grüße,

Peter

Hallo !

Hallo allerseits,

folgendes Problem: Ich habe hier eine große (>100MB) Datei,
die zuerst aus ein paar Zeilen Text und danach aus vielen,
vielen Binärdaten besteht. Nun muß ich in der dritten Zeile,
die nur eine Zahl enthält, eben jene Zahl ändern. Wie mache
ich das effektiv?

Ungetestet:

#!/usr/bin/perl
use strict;
my ($file,$from,$to)=@ARGV;
open(F, "+

Als Script speichern und mit dem Dateinamen, zu ersetzender Zahl und neuer Zahl als Parameter aufrufen. Sollte die zu ersetzende Zahl nicht in den ersten 4096 Bytes stehen, die Zahl entsprechend anpassen.

Alexander

Hallo Alexander,

ich bin beeindruckt, vielen herzlichen Dank für die schnelle Hilfe. Das Programm macht genau, was es soll. Perl-Vodoo,wie ich vermutet habe. Und es funktioniert ungetestet, Respekt.

Vielen Dank nochmal und viele Grüße,

Peter

Ungetestet:

#!/usr/bin/perl
use strict;
my ($file,$from,$to)=@ARGV;
open(F, "+

Als Script speichern und mit dem Dateinamen, zu ersetzender
Zahl und neuer Zahl als Parameter aufrufen. Sollte die zu
ersetzende Zahl nicht in den ersten 4096 Bytes stehen, die
Zahl entsprechend anpassen.

Alexander