Tengo un montón de archivos en un directorio y de cada archivo quiero eliminar la primera línea (incluido el retorno de carro). Puedo leer todo el archivo en una serie de cadenas y escribir todo menos el primer elemento en un nuevo archivo, pero eso me parece un poco engorroso ¿hay formas mejores? Oh, el idioma preferido es Perl.Perl: cómo elimino la primera línea de un archivo sin leer ni copiar todo el archivo
Respuesta
prueba este revestimiento
perl -pi -e '$_ = "" if ($. == 1);' filename
lo he usado antes, debería ser todo lo que necesita.
+1 Nunca necesita almacenar más de una línea a la vez. – mob
¿Puedes explicar cómo funciona esto? – FistOfFury
básicamente dice ejecutar perl, analizar en su lugar y ejecutar la siguiente línea de código. La siguiente línea usa la variable predeterminada $ _ que en este caso es la línea leída por la opción -p. ps es el número de línea de nombre de archivo. entonces, si el número de línea es == 1, configure el texto de la línea en "". –
use Tie::File qw();
for my $filename (glob 'some_where/some_files*') {
tie my @file, 'Tie::File', $filename or die "Could not open $filename: $!";
shift @file;
}
+1 si solo para su PS. :) –
Tenga en cuenta que esto todavía tiene que leer y copiar todo el archivo, pero eso es inherente al problema. No sé de ningún sistema operativo que proporcione otra forma de eliminar datos desde el comienzo de un archivo. – cjm
Tie :: File es mi opción obvia porque se ha escrito explícitamente para tratar esta categoría de problema exacta de manera eficiente. – daxim
perl -n -i -e 'print unless $. == 1' myfile
Esto es similar a la respuesta de stocherilac.
Pero, en cualquier caso (y en todas las demás respuestas dadas) siempre está leyendo el archivo completo. No hay forma de evitar eso, AFAIK.
+1 para más de una forma de hacerlo :) –
+1 para una versión (más fácil de leer). –
En Windows bajo la consola MinGW, ese borró mi archivo "No se puede editar in situ en myfile: Permiso denegado" – user869097
¿Qué tal
tail +2
con cáscara?
(edit: en Linux más reciente es posible que necesite tail -n +2
(gracias, GNU :()!)
Oh el idioma preferido es Perl
veces sed
es mejor que sed
. incluso perl:
sed -i 1d *
como ha señalado Schwern, la siguiente no no realizar una salida temprana como había pensado en un principio que lo haría:
perl -pi -e '$_ = q// and last if $. == 1;' myFile
parece que uno no puede evitará el tratamiento de todo el archivo después de todo.
Esto no hace lo que usted cree que hace. Si lo hiciera, violaría cómo funcionan los archivos en Unix. Lo que realmente está sucediendo es '$ _ =" "' siempre es falso, por lo que '$ _ =" "y last' es lo mismo que' 0 y last'.Se cortocircuita y nunca llama '' último ''. Usted ha escrito: 'perl -pi e '$ _ = q // si $. == 1 'myFile', que es una manera inteligente de no imprimir la primera línea, pero definitivamente lee todo el archivo. Ejecutar con '-MO = Deparse' para obtener el código y ejecutarlo en el depurador para ver. 'haz {esto; ese; } si algo' es una construcción más segura. – Schwern
@Schwern: Mi mal. Tu explicación tardó un poco, pero entiendo tu punto. – Zaid
- 1. Cómo leer solo la primera línea de un archivo
- 2. Rendimiento al leer un archivo línea por línea vs leer todo el archivo
- 3. ¿Leer solo la primera línea de un archivo?
- 4. ¿Cómo leer todo el archivo en Ruby?
- 5. Obtener dimensiones de la imagen sin leer todo el archivo
- 6. ¿Cómo puedo leer/transmitir un archivo sin cargar todo el archivo en la memoria?
- 7. C Eliminar la primera línea de un archivo de texto sin reescribir el archivo
- 8. ¿Cómo usar Boost :: Spirit :: Lex para leer un archivo sin leer todo el archivo en la memoria primero?
- 9. Python: obtenga el iterador de columna de un archivo (sin leer todo el archivo)
- 10. ¿Cómo leer todo el texto de un archivo de bytes []?
- 11. anexar archivos a un archivo sin leer/reescribir todo el archivo
- 12. Leyendo la primera línea de un archivo en Ruby
- 13. Perl leer línea por línea
- 14. ¿Cómo leer un archivo .gz línea por línea en C++?
- 15. ¿Lectura de .csv en Python sin recorrer todo el archivo?
- 16. En Scala, al leer un archivo, ¿cómo me saltaría la primera línea?
- 17. En Scala, ¿cómo leer un archivo CSV simple con un encabezado en su primera línea?
- 18. ¿Cómo cambio, elimino o inserto una línea en un archivo o añado al comienzo de un archivo en Perl?
- 19. Bash- ¿cómo leer la penúltima línea de un archivo?
- 20. Cómo hacer que Copiar Postgres ignore la primera línea del archivo de texto grande
- 21. MSBuild Copiar tarea sin copiar archivos la primera vez
- 22. Perl: leer el archivo de texto web y "abrirlo"
- 23. ¿Cómo copiar un archivo?
- 24. ¿Cómo leer datos línea por línea desde un archivo usando el script ant?
- 25. phantomjs javascript leer un archivo local línea por línea
- 26. Salteando la primera línea al leer en un archivo en 1.9.3
- 27. PHP: Leer línea específica del archivo
- 28. Comandos de lote de Windows para leer la primera línea del archivo de texto
- 29. Leer un archivo de texto línea por línea en Qt
- 30. Perl: ¿cómo puedo poner todo mi código en línea C en un archivo separado?
Esto es imposible porque cómo se almacenan los archivos. Siempre tendrá que leer todo el archivo y escribir todo menos la primera línea; el sistema operativo no tiene otra opción. – Konerak