¿Son Ex/vim ex-mode y sed utilidades categóricamente diferentes o dos programas diferentes para las mismas tareas?

¿Son Ex/vim ex-mode y sed utilidades categóricamente diferentes o dos programas diferentes para las mismas tareas?

Entiendo que sed (editor de secuencias) es un editor no interactivo que resulta útil para secuencias de comandos y procesamiento por lotes. También entiendo que ex y su invocación vim: ex-mode son editores de línea para procesamiento de texto no interactivo. Mi pregunta no es de opinión sobre cuál es mejor o más útil, sino más bien si existe algún caso de uso previsto o ventaja para el modo ex/ex que lo distinga de sed. La razón por la que pregunto es para determinar si me estoy perdiendo algo al ignorar el modo ex en favor de sed. Gracias de antemano.

Respuesta1

Una diferencia importante entreexysedes que el primero (al menos en la implementación de Vim) lee el archivo completo en unbuffery opera sobre eso. Mientras que la "s" en sed significatransmisión, es decir, sed lee los archivos de entrada línea por línea y los genera sobre la marcha. Por lo tanto, sed maneja archivos muy grandes fácilmente, mientras que ex/Vim necesitará el espacio de direcciones virtuales de su sistema operativo y será considerablemente más lento en lectura y escritura.

Entonces, con sed, si necesita mantener un contexto de líneas anteriores, debe unirlo explícitamente con elespacio de patrón, o guárdalo en el único disponiblemantener espacio. Mientras que en ex/Vim, puedes volver a una línea anterior o usar expresiones regulares que abarquen varias líneas en el búfer. Además, no hay sólo unmantener espacio, pero múltiplesregistros nombradosen Vim (llamadobuffers con nombreen ej.). Entonces, si un solo espacio de almacenamiento no es suficiente, debes actualizar de sed aawk(para mantener el aspecto de transmisión) o cambiar a ex / Vim.

En la práctica

Si ya tengo un archivo abierto en Vim, naturalmente usomodo expara ciertas manipulaciones de texto. :substitutees uno de los comandos más utilizados (al menos para mí). Muchos comandos ex tienen un correspondiente (a menudo recursivo)macroimplementación; Dependiendo de la tarea (y de las preferencias/habilidades personales), se tiende a utilizar uno u otro con más frecuencia.

Para tareas de automatización, prefiero la cadena de herramientas // sed; Lo bueno aquí es que puedes comenzar poco a poco (con sed), y una vez que alcances los límites de sus capacidades, puedes migrar con bastante facilidad a la siguiente herramienta, que es más poderosa (pero también más compleja y más grande). Si se trata de una tarea de automatización única y ya conozco una macro ingeniosa o un complemento de Vim que simplifica enormemente la implementación, considero usar Vim como una utilidad de línea de comandos no interactiva enawkPerlmodo ex silencioso. Para otras tareas, esto generalmente no es una opción debido a las dependencias (de Vim, el complemento, mi configuración personal).

Resumen

Puedes hacer muchas cosas solo con sed y nada más. Si no eres usuario de Vim (especialmente si usas elotroeditor, y puede realizar un potente procesamiento de texto allí), ex (modo) no es tan importante, pero nunca está muy lejos, ya que su sintaxis está estrechamente alineada con sed, de todos modos.

información relacionada