linux user group brescia

immagine del castello

Archivio della mailing list

inserire una riga in un file

Carlo Bertoldi mcbain a tiscali.it
Lun 31 Ott 2005 15:21:52 UTC
Enrico Colombini ha scritto:
> On Monday 31 October 2005 08:57, Davide Arrigo wrote:
> 
>>Ecco appunto.. mi chiedevo se si poteva fare qualche magia con perl, awk e
>>sed (che conosco poco e niente)
> 
> 
> Con perl sicuramente si puo' fare, ha un'opzione per modificare il file 'in 
> place' e se ben ricordo puoi anche agire in base al numero di linea.
> Non chiedermi pero' di scriverti le 2-3 righe di codice perche' in questo 
> periodo sono in 'leggero' sovraccarico e ogni volta che prendo in mano il 
> perl devo rileggermi la short reference (e' molto simpatico, ma e' un 
> linguaggio write-only).
> 
>   .Erix.
> 
> 
Sicuramente mi sono perso qualcosa, ma l'unica cosa "in place" che ho 
trovato in perl è lo switch -iext da riga di comando che fa si che un 
file in input venga rinominato come file.ext e le eventuali stampe 
vengano eseguite sul file con il nome originale.

Un possibile programmino perl per fare un inserimento in testa lo vedrei 
così:

#!/usr/bin/perl

#File con riga da aggiungere in testa
open(FILEIN, @ARGV[0]) or die("Non riesco ad aprire il file @ARGV[0]: $!");
#File cui aggiungere la riga in testa
open(FILE, "+< @ARGV[1]") or die("Non riesco ad aprire il file @ARGV[1]: 
$!");
open(FILETMP, "> @ARGV[2]" ) or die("Non riesco ad aprire il file 
@ARGV[2] $!");


while (<FILEIN>) {
         print FILETMP $_;
         print $_;
}

while (<FILE>) {
         print FILETMP $_;
         print $_;
}

seek(FILETMP, 0, SEEK_SET);
seek(FILEIN, 0, SEEK_SET);

while (<FILETMP>) {
         print FILEIN $_;
}
unlink FILETMP;

e lo richiamerei così:

./inserisci_in_testa.pl prova prova2 `mktemp temp.XXXXXX`

Sicuramente non è un granché come codice, la soluzione solo bash mi 
sembra più rapida, per lo meno in quando a righe di codice scritte :D

Ciao,
  Carlo



Maggiori informazioni sulla lista Lug