Completa la guía de mando Sed

Qué tal soy Ana. Os traigo un nuevo post sobre el sistema operativo mas molón. Un placer linuxeros.

En un artículo anterior, mostré el uso básico de Sed, el editor de flujo, en un caso de uso práctico. Hoy, estad preparados para obtener más información sobre Sed, ya que haremos un recorrido en profundidad sobre el modelo de ejecución del sed.

Esta será también una oportunidad para hacer una revisión exhaustiva de todas las órdenes Sed y para adentrarse en sus detalles y sutilezas.

Por lo tanto, si está listo, inicie un terminal, descargue los archivos de prueba y sentarse cómodamente frente al teclado: empezaremos nuestra exploración ahora mismo.

Un poco de teoría sobre Sed

guía completa de referencia a las órdenes sed

Un primer vistazo al modelo de ejecución sed

Para entender realmente Sed, debe de entender el modelo de ejecución de la herramienta.

Cuando procesa datos, Sed lee una línea de entrada a la vez y las almacena en el llamado espacio patrón. Todas las transformaciones de Sed aplican al espacio patrón. Las transformaciones se describen mediante órdenes de una sola letra proporcionadas a la línea de comandos o en un archivo de escritura Sed externo. La mayoría de órdenes Sed pueden ir precedidas de una dirección o de un intervalo de direcciones, para limitar su alcance.

Por defecto, Sed imprime el contenido del espacio del patrón al final de cada ciclo de procesamiento, es decir, justo antes de eliminar el espacio del patrón con la siguiente línea de entrada. Podemos resumir este modelo así:

  1. Intente leer la siguiente línea de entrada al espacio del patrón

Si la lectura tuvo éxito:

  1. Aplique en el orden de secuencia todas las órdenes la dirección coincida con la línea de entrada actual
  2. Si sed no se lanzó en modo silencioso (-n) Imprime el contenido del espacio del patrón (potencialmente modificado)
  3. volví a 1.

Como el contenido del espacio del patrón se pierde después de procesar cada línea, no es adecuado para el almacenamiento a largo plazo. Con este propósito, Sed tiene un segundo buffer, el mantener el espacio. Sed más limpieza, pone ni obtiene datos del espacio de retención a menos que lo solicite explícitamente. Más adelante lo investigaremos más a fondo en estudiar las órdenes de intercambio, obtener y mantener.

La máquina abstracta Sed

El modelo explicado anteriormente es lo que verá descrito en muchos tutoriales Sed. De hecho, es bastante correcto para entender los programas Sed más básicos. Pero cuando empiece a profundizar en órdenes más avanzadas, verá que no es suficiente. Intentamos, pues, ser un poco más formales ahora.

En realidad, Sed se puede ver como implementar un archivo máquina abstracta de quien estado está definido por tres buffers, dos registros, Y dos banderas:

  • tres amortiguadores para almacenar texto de longitud arbitraria. sí: tres! En el modelo de ejecución básico hemos hablado del patrón y del espacio de retención, pero Sed tiene un tercer buffer: el añadir cola. Desde la perspectiva de la escritura Sed, se trata de una memoria intermedia de sólo escritura que Sed lavará automáticamente en momentos predefinidos de su ejecución (a grandes rasgos antes de leer una nueva línea desde la entrada o justo antes de dejar de fumar).
  • Sed también mantiene dos registros: el contador de línea (LC) que contiene el número de líneas leídas de la entrada y el archivo contador de programas (PC) que siempre mantiene el índice ( «posición» en el script) del orden siguiente a ejecutar. Sed incrementa automáticamente el PC como parte del bucle principal. Pero mediante órdenes específicas, un script también puede modificar directamente el PC para omitir o repetir partes del programa. Así se pueden implementar bucles o sentencias condicionales con Sed. Más información en la sección de ramas dedicadas a continuación.
  • finalmente dos banderas puede modificar el comportamiento de ciertas órdenes Sed: el marca de impresión automática (AP) el bandera de sustitución (SF). Cuando la marca de impresión automática es conjunto, Sed imprimirá automáticamente el contenido del espacio del patrón antes sobreescribiendo él (sobre todo antes de leer una nueva línea de entrada, pero no sólo). Cuando la marca de impresión automática es claro ( «No definido»), Sed nunca imprimirá el contenido del espacio del patrón sin una orden explícita al script. Puede borrar la señal de impresión automática ejecutando Sed en «modo silencioso» (mediante el archivo -n opción de línea de comandos o mediante el comentario especial#n en la primera línea o en el guión). El «señalador de sustitución» lo define el orden de sustitución (el archivo s pedido) cuando la dirección y el patrón de búsqueda coinciden con el contenido del espacio del patrón. La etiqueta de sustitución se borra al inicio de cada nuevo ciclo, o cuando se lee una nueva línea desde la entrada o después de que se toma una rama condicional. Una vez más, volveremos a revisar este tema en detalles en la sección de ramas.

Además, Sed mantiene la lista de órdenes que han introducido su intervalo de direcciones (más sobre la sección de direcciones de intervalo), así como un par de controladores de archivos para leer y escribir datos. Encontrará más información al respecto en la descripción de la orden de lectura y escritura.

El Blog lo escribimos para ayudar y servir de referencia a la gente Linux. Esperamos que os guste.

Leave a Reply