Cómo utilizar Sed en Linux

Cómo utilizar Sed en Linux
Una fotografía de dos monitores de computadora que muestran una gran cantidad de código.

Sed es un programa UNIX simple que no crea ni edita archivos. Solo modifica los datos que pasan por su entrada y presenta los datos modificados en su salida. Aquí, observamos una breve descripción general de la filosofía UNIX, repasamos los conceptos básicos de uso sedy le mostramos ejemplos de cómo usar el programa para tareas diarias.

Los conceptos básicos del uso de Sed

Sed es un programa que puede leer y modificar flujos de datos de texto. Esto significa que, a diferencia de un editor de texto normal, sed no modifica directamente los archivos de su computadora. En cambio, actúa más como un «filtro» para los datos entrantes y le permite transformarlos de la forma que desee.

Para comenzar a usar sed, primero crea un archivo con al menos cinco líneas de texto dentro. Asegúrate de que haya un carácter de «nueva línea» entre las líneas:

El comando general para sed es algo como:

Una de las funciones más básicas de sed es el nsubcomando. Funciona leyendo datos de la entrada de sed y colocándolos en el “espacio de patrones” de su programa. Este es un búfer especial que almacena cualquier texto entrante antes de que sed lo manipule:

Una terminal que muestra el contenido de la

Otra de las funciones básicas de sed es el psubcomando. De manera similar a n, lee los datos que llegan desde la entrada de sed y los coloca en el espacio de patrones del programa. Sin embargo, también los imprime explícitamente en la salida de su terminal.

El uso del psubcomando puede resultar confuso para los principiantes, ya que ejecutarlo con cualquier entrada de texto hace que sed imprima su salida dos veces. Esto se debe a que, de forma predeterminada, sed imprime automáticamente su espacio de patrones independientemente de si pestá presente o no:

Una terminal que muestra la salida del subcomando p sin el indicador -n.

Para desactivar este comportamiento peculiar, agregue la -nbandera antes de ejecutar los subcomandos sed:

Una terminal que muestra la salida del subcomando p con el indicador -n habilitado.

Una vez aclarados los conceptos básicos, las siguientes secciones analizarán las diferentes formas en que puede utilizar sed para manipular datos de texto.

1. Seleccionar y recortar secuencias de texto

Además de imprimir, también puede utilizar sed para seleccionar y recortar texto tanto de secuencias de datos como de archivos. La forma más sencilla de hacerlo es agregar un valor de rango al psubcomando.

El siguiente comando utiliza la sintaxis de rango de sed para imprimir la tercera a la quinta línea en su archivo “hello.txt”:

Una terminal que muestra la capacidad de sed para imprimir rangos de líneas específicos.

También puede utilizar el psubcomando para imprimir líneas no adyacentes en su texto. Por ejemplo, lo siguiente imprime la primera y la cuarta línea en el archivo “hello.txt”:

Una terminal que muestra sed imprimiendo líneas no adyacentes desde un archivo de texto.

2. Eliminar texto de una secuencia de Sed

Sed también puede eliminar datos de cualquier flujo de texto entrante. Esto resulta útil si desea eliminar algunas líneas de texto de un archivo grande o limpiar la salida de un programa para mostrar solo la información que necesita.

Para ello, utilice el dsubcomando junto con la línea o rango específico que desea eliminar:

Una terminal que muestra el proceso de eliminación de líneas no adyacentes utilizando sed.

De manera similar a la impresión de líneas de texto, el dsubcomando funciona con rangos de varias líneas. Por ejemplo, el siguiente comando eliminará las primeras cuatro líneas del archivo “hello.txt”:

Una terminal que muestra el proceso de eliminar un rango de líneas usando sed.

Además de hacer coincidir rangos de líneas específicos, puedes usar expresiones regulares para buscar el texto que deseas eliminar. Al hacer esto, se le indicará a sed que busque todas las líneas que contengan la palabra «mundo» y las elimine:

También puede tratar las expresiones regulares como un rango para su archivo de entrada. Esto le brinda más flexibilidad para definir sus selecciones dentro del programa:

Una terminal que muestra la capacidad de sed para eliminar líneas de texto basándose en un patrón de expresión regular.

3. Cómo agregar texto nuevo a un flujo de datos SED

Además de eliminar texto, sed también puede agregar texto nuevo a flujos de datos existentes. Si bien no está al nivel de un editor de texto completo, esta función puede resultar útil para ediciones puntuales y adiciones de texto básicas.

Para agregar una nueva línea de texto, ejecute sed con el acomando seguido del texto que desea agregar:

Una terminal que muestra el proceso de agregar una sola línea de texto al final de una secuencia sed.

También es posible incluir archivos completos en un flujo de texto sed. Para ello, utilice el rcomando seguido del nombre del archivo que desea agregar:

Una terminal que muestra el proceso de agregar un archivo completo al final de una secuencia sed.

4. Búsqueda y reemplazo de texto en Sed

Una de las características más potentes de sed es su capacidad de buscar y reemplazar texto de un flujo de texto. A diferencia de agregar y eliminar texto, esto le permite editar datos de forma dinámica a medida que pasan por las tuberías de UNIX, lo que lo hace mucho más flexible en comparación con un editor de texto normal.

Comience por imprimir una prueba de su entrada de texto sin ninguna modificación de sed:

Una terminal que imprime el contenido del

Reemplace el psubcomando con s, luego agregue tres barras invertidas (/) después de él:

Inserte una expresión regular estructural de la cadena de caracteres que desea que coincida entre la primera y la segunda barra invertida. Por ejemplo, puedo poner el siguiente valor para buscar palabras que comiencen con «wo» en mi cadena de entrada:

Coloque el cursor de texto entre la segunda y la tercera barra invertida y, a continuación, proporcione el texto con el que desea reemplazar las coincidencias. A diferencia de la columna anterior, esta sección no utiliza expresiones regulares estructurales:

De manera predeterminada, sed solo reemplaza la primera cadena que coincide en una línea en particular. Esto puede ser un problema si desea reemplazar cada instancia de una palabra en su secuencia de texto. Para solucionar esto, agregue la gopción después de la tercera barra invertida de su expresión:

Una terminal que muestra el subcomando de sustitución en sed.

5. Copiar datos de texto al espacio de almacenamiento

Sed utiliza dos buffers para almacenar datos de texto: el espacio de patrones y el espacio de retención. El primero sirve como un lugar temporal para el texto a medida que pasa por las expresiones sed. Mientras tanto, el segundo actúa como un portapapeles donde se pueden almacenar datos de texto arbitrarios.

Una ventaja de este enfoque es que permite «conservar» determinados resultados sin depender de programas externos. Esto puede resultar útil si planea utilizar sed para procesar manipulaciones de texto de varios pasos.

Para comenzar a utilizar espacios de retención, primero asegúrese de tener un archivo con al menos algunas líneas de texto dentro:

Reemplace el psubcomando con h, luego proporcione un número de línea o un valor de expresión regular que sed coincidirá en su archivo. Al hacer esto, se le indicará a sed que tome esa línea de texto específica y la copie en su espacio de almacenamiento:

También puede utilizar el Hsubcomando para almacenar varias líneas de texto dentro de su espacio de espera. Por ejemplo, el siguiente comando almacena la tercera y cuarta línea de mi archivo de texto y las imprime en la terminal:

Una terminal que muestra el proceso de mantener múltiples líneas de texto en sed

6. Uso de etiquetas para crear bucles en Sed

Si bien sed no es un lenguaje de programación completo, es posible crear bucles dentro del programa. Esto resulta útil si necesita una expresión sed que tenga que recorrer continuamente un fragmento de texto en particular.

Para crear un bucle en sed, primero debe crear una etiqueta para su expresión sed. Para ello, debe utilizar el :subcomando seguido de la etiqueta que desea utilizar para su expresión.

Proporcione los criterios de coincidencia para su expresión sed. En mi caso, quiero que aparezca al final de cada línea en mi texto de entrada:

Escriba los subcomandos de sed que desea ejecutar cada vez que sed encuentre una coincidencia y luego enciérrelos entre llaves. Lo siguiente une dos líneas adyacentes, reemplaza el carácter de nueva línea con un espacio y luego vuelve al comienzo de la expresión:

Una terminal que muestra el proceso de eliminación de caracteres de nueva línea utilizando etiquetas sed en bucles.

Incluso puedes ampliarlo para que coincida con casi cualquier tipo de texto de entrada. Por ejemplo, el siguiente comando utiliza la función de expresiones regulares extendidas de sed para eliminar las etiquetas HTML del texto de entrada:

Una terminal que muestra cómo sed elimina las etiquetas HTML en un archivo usando bucles.

7. Realizar cambios permanentes en Sed

Al igual que cualquier otra herramienta UNIX, sed puede aprovechar la redirección de salida y las tuberías. Esto no solo le permite unir sed con otros programas, sino que también le brinda la oportunidad de hacer que sus cambios sean permanentes.

La siguiente línea de código crea un nuevo archivo “welcome.txt” a partir de la salida de mi comando sed:

Una terminal que muestra la capacidad de sed de usar la redirección de salida para guardar su salida en archivos.

Además de la redirección de salida, también puede utilizar la bandera incorporada -ipara editar su archivo actual en lugar de mostrar los cambios en la consola de su terminal. Por ejemplo, el siguiente comando elimina todos los caracteres de nueva línea de mi archivo de texto y lo guarda:

Una terminal que muestra el indicador -i en sed, lo que permite al programa

Si toda esta charla le ha hecho sentir curiosidad por la línea de comandos de Linux, puede leer nuestro artículo anterior en el que hablamos de algunos de los indicadores de Bash más interesantes que puede utilizar hoy en día.

Crédito de la imagen: Morgan Richardson vía Unsplash . Todas las modificaciones y capturas de pantalla son de Ramces Red.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *