Geht das jetzt?
Würde mich wundern, weil der 0a ja Zeilentrenner ist, d.h. beim zeilenweise verarbeiten niemals das Zeichen nach dem Zeilentrenner im Patternspace ist.
Bei sed ist das ziemlich nervig, da kann man wohl manuell die Pufferkontrolle übernehmen, aber das ist komplizierter, als ein kleines C-Programm zu schreiben.
Angeblich gibt es für sed einen Multiline-Modus, ich habe es mit meinem GNU sed noch nciht geschafft, Patterns über mehrere Zeilen hinweg zu adressieren.
Für Perl habe ich mal ein MIniskript gebaut, welches immer eine Zeile hinzuliest und dann mit der Doppelzeile nach Patterns sucht (eigentlich arbeitet es mit einem Doppel-Pattern <zeilenende>/n<zeilenanfang>).
Greetz
Thomas
Code:
#!/usr/bin/perl
#$z_end = "ende";
#$z_anf = "anfang";
#$new_end ="EEEE";
#$new_anf = "AAAA";
if (@ARGV <2) { die "Es werden 2 Paramter benoetigt: ende#anfang und endeneu#anfangneu!\n"; }
@finde = split /#/, $ARGV[0];
@ersetze = split /#/, $ARGV[1];
print "Finde: @finde, ersetze: @ersetze\n";
$lin2="";
while (<STDIN>) {
$lin1 = $lin2;
$lin2 = $_;
if (($lin1 =~ /($finde[0])$/) and ($lin2 =~ /^($finde[1])/)) {
$lin1 =~ s/($finde[0])$/$ersetze[0]/;
chomp ($lin1);
$lin2 =~ s/^($finde[1])/$ersetze[1]/;
}
print $lin1;
}
Lesezeichen