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