2011-05-26 16 views
7

Quiero agregar un texto en la parte superior de mi archivo data.txt, este código agrega el texto al final del archivo. cómo puedo modificar este código para escribir el texto en la parte superior de mi archivo data.txt. Gracias de antemano por cualquier ayuda.agregar un texto en la parte superior del archivo

open (MYFILE, '>>data.txt'); 
print MYFILE "Title\n"; 
close (MYFILE) 
+0

http://stackoverflow.com/questions/2322140/how-do-i-change-delete-or -insert-a-line-in-a-file-or-append-to-the-beginning-o – daxim

Respuesta

6
perl -pi -e 'print "Title\n" if $. == 1' data.text 
+1

Excelente para un solo liner, pero debe tenerse en cuenta que esto sigue recorriendo el archivo línea por línea e imprime cada uno de nuevo en el archivo original. Visite http://oreilly.com/pub/h/73 para obtener un excelente artículo sobre este caso de uso. –

7

Su sintaxis es ligeramente fuera obsoleta (gracias, Seth):

open(MYFILE, '>>', "data.txt") or die $!; 

Usted tendrá que hacer un recorrido completo a través del archivo y escribir los datos deseados antes de que los contenidos de los archivos existentes :

open my $in, '<', $file  or die "Can't read old file: $!"; 
open my $out, '>', "$file.new" or die "Can't write new file: $!"; 

print $out "# Add this line to the top\n"; # <--- HERE'S THE MAGIC 

while(<$in>) { 
    print $out $_; 
} 
close $out; 
close $in; 

unlink($file); 
rename("$file.new", $file); 

(robado gratuitamente del Perl FAQ, a continuación, modificado)

Esto procesará el archivo línea por línea para que en archivos grandes no se consuma una tonelada de memoria. Pero, no es exactamente rápido.

Espero que ayude.

+0

La sintaxis que citó es correcta, pero obsoleta. –

+0

gracias por su respuesta !!! – dan

3

Anexar a la parte superior normalmente se denomina anteponer.

open(M,"<","data.txt"); 
@m = <M>; 
close(M); 
open(M,">","data.txt"); 
print M "foo\n"; 
print M @m; 
close(M); 

data.txt- Alternativamente abierto para escritura y luego pasar a data.txt- datos.txt después del cierre, que tiene la ventaja de ser tan atómica interrupciones no pueden dejar el archivo datos.txt truncado.

+0

funciona a la perfección. ¡¡¡muchas gracias!!! – dan

7

Hay una mucho más simple de una sola línea para anteponer un bloque de texto a cada archivo. Digamos que usted tiene un conjunto de archivos con el nombre cuerpo1, cuerpo2, body3, etc, a la que desea agregar el prefijo a un bloque de texto contenido en un archivo llamado cabecera:

cat header | perl -0 -i -pe 'BEGIN {$h = <STDIN>}; print $h' body* 
+1

Acabo de descubrir que hay un problema con este código: no inserta el encabezado en un archivo vacío. –

0

Perl -ni -e 'print' Título \ n "$. == 1 'nombre del archivo, imprima la respuesta una vez

Cuestiones relacionadas