Estoy intentando utilizarlo ed
para editar la primera línea de un archivo grande, pero tengo que esperar ed
para leer todas las líneas. ¿Hay alguna manera de dejar ed
de leer el archivo completo y comenzar a editarlo inmediatamente, siendo la línea actual la primera?
Respuesta1
Como señaló Shellter, ed
no puede hacer esto. La mayoría de las operaciones de edición requieren que el archivo se reescriba; solo se pueden realizar reemplazos en el lugar; en ese caso, podría usar hexedit(1)
.
La forma que consume menos memoria es utilizar sed
operaciones, por ejemplo, para reemplazarAgostoconJunioen la primera línea:
sed '1s/August/June/' FILE > NEWFILE
Respuesta2
No es posible dejar ed
de leer un archivo completo o hacer que la primera línea del búfer de edición sea la línea actual automáticamente después de abrir un documento con el editor.
El ed
editor siempre lo coloca en la última línea afectada por un comando (o justo después o antes cuando el comando es d
), y leer un archivo al inicio es similar a usar e filename
, que descarta el búfer de edición actual, abre el archivo nombrado para editarlo. y establece la línea actual en la última línea leída del archivo.
¿Desea realizar cambios en un documento grande de forma no interactiva y luego utilizar sed
o awk
proporcionar mejores alternativas, ya que estas herramientas funcionan en secuencias y no leen de forma predeterminada el documento completo en la memoria?
Si realmente desea realizar una edición interactiva de documentos grandes, puede intentar dividir el documento en partes con split
, editar las partes que le interesa modificar (usando ed
o vi
cualquier otro editor) y luego simplemente usar cat
para concatenar los trozos nuevamente juntos.
Sesión de edición hipotética para editar las primeras 5 líneas de un archivo enorme en ed
:
$ed e! head -n 5 archivo enorme 123 gramos/^/m0 ¡w! { gato - ; cola -n +6 archivo enorme; } >archivoenorme.nuevo q
Es decir, solicite editar la salida de head -n 5 hugefile
. La edición que realizo aquí es simplemente invertir las líneas ( g/^/m0
, "mover cada línea, por turno, antes de la primera línea"). Luego escriba el búfer de edición modificado en un comando de shell que concatene el contenido del búfer con la línea 6 en adelante desde el archivo original. El resultado se escribe en un nuevo nombre de archivo. Q
luego sale del editor.