linux-l: Zeile-Löschen
Carsten Paeth
calle at calle.in-berlin.de
So Apr 5 18:38:09 CEST 1998
>
> Carsten Paeth wrote:
> >
> > >
> > > Bjoern Feustel wrote:
> > > >
> > > > On Sat, 4 Apr 1998, Johannes Walther wrote:
> > > >
> > > > > Hallo,
> > > > >
> > > > > ich möchte aus einer Datei Zeilen löschen, in der bestimmte Sachen
> > > > > vorkommen.
> > > > > Dei Datei soll dabei an der selben Stelle bleiben, also auch dieselben
> > > > > Bindungen behalten.
> > > > > Wie bzw womit? AWK ? PERL ? Shell-Script ?
> [...]
> > Ich empfehle benutze meist:
> >
> > vi bla.txt
> > :g/kick/d
> > :wq
> >
> > oder in scripten
> >
> > cp bla.txt bla.tmp
> > grep -v 'kick' > bla.txt
> > rm -f bla.tmp
Da einige was sich ändert ist die modification/access time,
und die Blöcke auf der Platte.
Gleich bleibt:
Inodenummer
change time
change time
owner
group
mode
Anmerkung: owner/group werden nur beim Erzeugen eines File
oder durch chown(2) geändert.
Wenn man die modification time behalten will:
cp bla.txt bla.tmp
touch -r bla.txt bla.tmp
grep -v 'kick' > bla.txt
touch -r bla.tmp bla.txt
rm -f bla.tmp
oder perl :-)
$fn="bla.txt";
$tmp="$fn~";
my ($sdev, $sino, $smode, $snlink, $suid, $sgid,$rdev,$size,$atime,$mtime)=stat($fn);
open(INPUT,"<$fn") || die "Can't open $fn for reading";
open(OUTPUT,">$tmp") || die "Can't open $tmp for writing";
while (<INPUT>) {
next if (/kick/);
print OUTPUT;
}
close(INPUT) || die "Read error on $fn ?";
close(OUTPUT) || die "Write error on $tmp ?";
open(INPUT,"<$tmp") || die "Can't open $tmp for reading";
open(OUTPUT,">$fn") || die "Can't open $fn for writing";
print OUTPUT while (<INPUT>);
close(INPUT) || die "Read error on $tmp ?";
close(OUTPUT) || die "Write error on $from ?";
#chown ($suid, $sgid, $fn) || die "Can't chown $fn";
#chmod (($smode & 07777), $fn) || die "Can't chmod $fn";
utime($atime,$mtime,$fn);
unlink($tmp);
Ich denke die sh-version ist kürzer ...
calle
>
> Werden damit nicht die Bindungen aufgebrochen?
>
> Hannes
> --
> Johannes Walther <http://walther.in-berlin.de>
>
Mehr Informationen über die Mailingliste linux-l