¿Cómo puedo eliminar la primera línea de un archivo y guardar los cambios?
Intenté esto pero borra todo el contenido del archivo.
$sed 1d file.txt > file.txt
shell-script
sed
ksh
kickass13
fuente
fuente
sed
, puede usarsed -i .bak '1d' file.txt
.ed
.ed
comando sería:printf "%s\n" 1d w q | ed file.txt
(I heart ed)-exec sed -i '1d' {} \;
Una opción alternativa muy liviana es simplemente 'ajustar' todo menos la primera línea (esta puede ser una forma fácil de eliminar encabezados de archivos en general):
Siguiendo a @Evan Teitelman, puedes:
Para evitar un archivo temporal. Otra opción podría ser:
Etcétera. Prueba de la última:
Vaya, perdimos una nueva línea (según el comentario de @ 1_CR a continuación), intente en su lugar:
Volviendo a sed, intente:
o quizás
Para evitar efectos secundarios.
fuente
tail
truco funcionó para mí (tardó menos de 3 segundos en un archivo de 130 MB). ¡Gracias!echo "$(tail -n +2 file.txt)" > file.txt
Es la respuesta perfecta.También echa un vistazo a
sponge
partirmoreutils
.sponge
absorbe los datos de la entrada estándar hasta que el final de escritura de la entrada estándar se cierra antes de escribir en un archivo. Se usa así:fuente
Este tema es de interés, por lo que pruebo el punto de referencia de 3 maneras:
sed '1d' d.txt > tmp.txt
tail -n +2 d.txt > tmp.txt
sed -i '1d' d.txt
Tenga en cuenta que el objetivo
d.txt
es un archivo de 5.4GBObtén el resultado:
Conclusión: a continuación parece ser la forma más rápida:
sed '1d' file.txt > tmpfile; mv tmpfile file.txt
fuente
sed '1d' d.txt
método no incluyó (o eso parece al leer sus pruebas) elmv
comando. En mis pruebas en FreeBSD con un archivo de 20 MB,sed -i
fue el más rápido.ex
se puede usar para una verdadera edición in situque no involucra un archivo temporalfuente
strace -e open ex -c ':1d' -c ':wq' foo
. ex trunca el archivo original con el archivo temporal, mientras que la opción -i de GNU sed sobrescribe el original con el archivo temporal. No estoy seguro de cómo funciona el sed de BSD.La forma más corta y sencilla de eliminar la primera línea de un archivo usando
sed
es:fuente
Puede usar Vim en modo Ex:
1
encontrar la primera línead
Eliminarx
guardar y cerrarfuente
Este comando eliminará 1 línea y guardará como "file.txt".
fuente
Para eliminar una línea de praticiler en el archivo
Archivo Sed '1d'
Archivo Sed '1d3d'
Eliminar personaje en línea
1 Eliminar los dos primeros charter en lin
Archivo de Sed /^..//
2 Eliminar las dos últimas líneas de chrectercina
Archivo de Sed / .. £ //
3 Eliminar línea en blanco
Archivo Sed '/ ^ £ / d'
fuente
£
≠$
.Podría usar vim para hacer esto:
fuente
cat file01 | sed -e '1,3d'
// muestra contenido en el archivo 01 pero elimina la primera y tercera línea
fuente