GNU/Linux >> Tutoriales Linux >  >> Linux

Guía Completa de Comandos Sed [Explicada con Ejemplos Prácticos]

En un artículo anterior, mostré el uso básico de Sed, el editor de secuencias, en un caso de uso práctico. Hoy, prepárese para obtener más información sobre Sed, ya que realizaremos un recorrido en profundidad por el modelo de ejecución de sed.

Esta será también una oportunidad para hacer una revisión exhaustiva de todos los comandos Sed y profundizar en sus detalles y sutilezas.

Entonces, si está listo, inicie una terminal, descargue los archivos de prueba y siéntese cómodamente frente a su teclado:¡comenzaremos nuestra exploración ahora mismo!

Un poco de teoria sobre Sed

Un primer vistazo al modelo de ejecución sed

Para comprender verdaderamente Sed, primero debe comprender el modelo de ejecución de la herramienta.

Al procesar datos, Sed lee una línea de entrada a la vez y la almacena en el llamado espacio de patrón . Todas las transformaciones de Sed se aplican al espacio patrón. Las transformaciones se describen mediante comandos de una letra proporcionados en la línea de comandos o en un archivo de script Sed externo. La mayoría de los comandos Sed pueden estar precedidos por una dirección o un rango de direcciones para limitar su alcance.

De forma predeterminada, Sed imprime el contenido del espacio patrón al final de cada ciclo de procesamiento, es decir, justo antes de sobrescribir el espacio patrón con la siguiente línea de entrada. Podemos resumir ese modelo así:

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

Si la lectura fue exitosa:

  1. Aplicar en el orden del script todos los comandos cuya dirección coincida con la línea de entrada actual
  2. Si sed no se inició en modo silencioso (-n ) imprime el contenido del espacio del patrón (potencialmente modificado)
  3. volví a 1.

Dado que el contenido del espacio patrón se pierde después de que se procesa cada línea, no es adecuado para el almacenamiento a largo plazo. Para ello, Sed dispone de un segundo búfer, el espacio de espera . Sed nunca borra, coloca u obtiene datos del espacio de espera a menos que lo solicite explícitamente. Lo investigaremos más a fondo más adelante cuando estudiemos los comandos de intercambio, obtener y mantener.

La máquina abstracta Sed

El modelo explicado anteriormente es lo que verá descrito en muchos tutoriales de Sed. De hecho, es lo suficientemente correcto para comprender los programas Sed más básicos. Pero cuando comience a profundizar en comandos más avanzados, verá que no es suficiente. Así que tratemos de ser un poco más formales ahora.

En realidad, se puede considerar que Sed implementa una máquina abstracta cuyo estado está definido por tres búferes, dos registros y dos banderas:

  • tres amortiguadores para almacenar texto de longitud arbitraria. Sí:tres ! En el modelo de ejecución básico hablamos sobre el patrón y el espacio de espera, pero Sed tiene un tercer búfer:la cola de anexos . Desde la perspectiva del script Sed, es un búfer de solo escritura que Sed vaciará automáticamente en momentos predefinidos de su ejecución (en términos generales, antes de leer una nueva línea de la entrada, o justo antes de salir).
  • Sed también mantiene dos registros :el contador de líneas (LC) que contiene el número de líneas leídas de la entrada y el contador de programa (PC) que siempre contienen el índice ("posición" en el script) del próximo comando a ejecutar. Sed incrementa automáticamente la PC como parte de su bucle principal. Pero usando comandos específicos, una secuencia de comandos también puede modificar directamente la PC para omitir o repetir partes del programa. Así es como se pueden implementar bucles o sentencias condicionales con Sed. Más sobre eso en la sección de sucursales dedicadas a continuación.
  • Finalmente dos banderas puede modificar el comportamiento de ciertos comandos Sed:la bandera de impresión automática (AP) la bandera de sustitución (SF). Cuando el indicador de impresión automática está establecido , Sed imprimirá automáticamente el contenido del espacio del patrón antes sobrescribiéndolo (especialmente antes de leer una nueva línea de entrada, pero no solo). Cuando la marca de impresión automática está clara ("no establecido"), Sed nunca imprimirá el contenido del espacio del patrón sin un comando explícito en el script. Puede borrar el indicador de impresión automática ejecutando Sed en "modo silencioso" (usando -n opción de línea de comando o usando el comentario especial #n en la primera línea o en el guión). La "bandera de sustitución" se establece mediante el comando de sustitución (los s comando) cuando tanto su dirección como el patrón de búsqueda coinciden con el contenido del espacio del patrón. El indicador de sustitución se borra al comienzo de cada nuevo ciclo, o cuando se lee una nueva línea de la entrada, o después de tomar una bifurcación condicional. Aquí nuevamente, revisaremos ese tema en detalle en la sección de sucursales.

Además, Sed mantiene la lista de comandos que han ingresado a su rango de direcciones (más información sobre la sección de direcciones de rango), así como un par de identificadores de archivos para leer y escribir datos. Encontrará más información al respecto en la descripción del comando de lectura y escritura.

Lea la historia completa

El resto del artículo está disponible solo para miembros de LHB Pro. Puede registrarse ahora por $50 al año para leer el resto de este artículo y obtener acceso GRATUITO a todas las publicaciones, libros electrónicos y cursos en video exclusivos para miembros.

Suscríbete¿Ya tienes una cuenta?Iniciar sesión
Linux
  1. Ordenarse con ordenar en la línea de comando

  2. Manipulación de texto en la línea de comando con sed

  3. Multitarea en la línea de comandos con screenie

  4. Usando múltiples patrones a la vez con el comando Sed

  5. Comando Echo con Ejemplos Prácticos

Cómo comprobar la versión del sistema operativo con la línea de comandos de Linux

Los 50 Ejemplos Prácticos del Comando SED en Linux

Comando de espera en Linux explicado con ejemplos prácticos

Cómo usar el poderoso comando Xargs en Linux [explicado con ejemplos]

Uso del comando sed de Linux con ejemplos

Tutorial de Unix Sed:operación de archivos de varias líneas con 6 ejemplos prácticos