ed: establece la primera línea como la línea actual predeterminada

ed: establece la primera línea como la línea actual predeterminada

Estoy intentando utilizarlo edpara editar la primera línea de un archivo grande, pero tengo que esperar edpara leer todas las líneas. ¿Hay alguna manera de dejar edde leer el archivo completo y comenzar a editarlo inmediatamente, siendo la línea actual la primera?

Respuesta1

Como señaló Shellter, edno 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 sedoperaciones, por ejemplo, para reemplazarAgostoconJunioen la primera línea:

sed '1s/August/June/' FILE > NEWFILE

Respuesta2

No es posible dejar edde 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 ededitor 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 sedo awkproporcionar 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 edo vicualquier otro editor) y luego simplemente usar catpara 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. Qluego sale del editor.

información relacionada