Stream Editor - Flujo de trabajo

En este capítulo, exploraremos cómo funciona exactamente SED. Para convertirse en un usuario experto de SED, es necesario conocer sus aspectos internos. SED sigue un flujo de trabajo simple: lectura, ejecución y visualización. El siguiente diagrama muestra el flujo de trabajo.

  • Read: SED lee una línea del flujo de entrada (archivo, tubería o stdin) y la almacena en su búfer interno llamado pattern buffer.

  • Execute: Todos los comandos SED se aplican secuencialmente en el búfer de patrones. De forma predeterminada, los comandos SED se aplican en todas las líneas (globalmente) a menos que se especifique el direccionamiento de línea.

  • Display: Envía el contenido (modificado) al flujo de salida. Después de enviar los datos, el búfer de patrones estará vacío.

  • El proceso anterior se repite hasta que se agota el archivo.

Puntos a tener en cuenta

  • El búfer de patrones es un área de almacenamiento volátil, privada y en memoria que utiliza el SED.

  • De forma predeterminada, todos los comandos SED se aplican en el búfer de patrones, por lo que el archivo de entrada permanece sin cambios. GNU SED proporciona una forma de modificar el archivo de entrada in-a-place. Lo exploraremos en secciones posteriores.

  • Hay otra área de memoria llamada hold bufferque también es un área de almacenamiento privada, en memoria y volátil. Los datos se pueden almacenar en un búfer de retención para su posterior recuperación. Al final de cada ciclo, SED elimina el contenido del búfer de patrón, pero el contenido del búfer de retención permanece persistente entre los ciclos de SED. Sin embargo, los comandos SED no se pueden ejecutar directamente en el búfer de retención, por lo que SED permite el movimiento de datos entre el búfer de retención y el búfer de patrón.

  • Inicialmente, tanto los búferes de patrón como de retención están vacíos.

  • Si no se proporcionan archivos de entrada, SED acepta la entrada del flujo de entrada estándar (stdin).

  • Si el rango de direcciones no se proporciona de forma predeterminada, entonces SED opera en cada línea.

Ejemplos

Creemos un archivo de texto quote.txt contener una cita del famoso autor Paulo Coelho.

[jerry]$ vi quote.txt 
There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

Para comprender el flujo de trabajo de SED, visualicemos el contenido del archivo quote.txt usando SED. Este ejemplo simula elcat mando.

[jerry]$ sed '' quote.txt

Cuando se ejecuta el código anterior, producirá el siguiente resultado.

There is only one thing that makes a dream impossible to achieve: the fear of failure.

En el ejemplo anterior, quote.txt es el nombre del archivo de entrada y antes hay un par de comillas simples que implican el comando SED. Desmitifiquemos esta operación.

El primer SED lee una línea del archivo de entrada quote.txt y la almacena en su búfer de patrones. Luego aplica los comandos SED en el búfer de patrones. En nuestro caso, no hay comandos SED, por lo que no se realiza ninguna operación en el búfer de patrones. Finalmente, borra e imprime el contenido del búfer de patrones en la salida estándar. ¿No es sencillo?

En el siguiente ejemplo, SED acepta la entrada del flujo de entrada estándar.

[jerry]$ sed '' 
       
      

Cuando se ejecuta el código anterior, producirá el siguiente resultado.

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
There is only one thing that makes a dream impossible to achieve: the fear of failure.

Aquí, la primera línea se ingresa a través del teclado y la segunda es la salida generada por SED. Para salir de la sesión SED, presione ctrl-D (^ D).