cat smb.conf.w7 | tr "\t" " " | tr -s " " smb.conf.w7 > tempfile && cat tempfile > smb.conf.w7
sed -i s/\#\ acl/\ acl/g smb.conf.w7
sed -i '/acl\ allow/s/#\t//' test.txt
Ich weiß nicht: Bei einer komplexen "Suchen und Ersetzen"-Operation in einer ganzen Datei muß man doch auch prüfen, welche Änderungen genau vorgenommen worden sind. Ich brauche da mehr Kontrolle. Ein Einzeiler erscheint mir dafür nicht ausreichend. Der macht zwar irgendwas, aber man kann nicht wirklich sicher sein, ob es auch das ist, was man wollte.Geier0815 schrieb:Wenn Du etwas nur aus einer Zeile raus haben willst, wirst Du nicht umhin kommen direkt auf die Zeile zu matchen. In diesem Thread hatte robi mir und damit Allen mal sehr gut erklärt wie das geht.
#!/usr/bin/perl
use warnings;
use strict;
my $infile = "smb.conf";
my $outfile = "out.txt";
open(my $fh, "<", $infile) or die;
my @a = <$fh>;
close($fh);
open(my $fh2, ">", $outfile) or die;
my $x = 1;
foreach my $i (@a) {
if ($i =~ "acl allow execute") {
my @b = split("#\t", $i);
my $i2 = $i; my $b1 = $b[1]; chomp($i2); chomp($b1);
print "\nChanged Line $x:\n'$i2'\nto\n'$b1'\n\n";
print $fh2 $b[1];
}
else {
print $fh2 $i;
}
$x++;
}
close($fh2);