Potencia tus habilidades en la línea de comandos con estos ejemplos de sed

¡Has estado buscando otra forma de realizar operaciones de edición en textos? ¡No busques más! Este tutorial te tiene cubierto con ejemplos del editor de secuencias sed.

En pocas palabras, sed te permite realizar una amplia gama de ediciones en archivos y secuencias de texto de manera no interactiva. Tú tomas las decisiones de edición mientras llamas a los comandos. Y en este tutorial, aprenderás cómo utilizar los comandos de sed y optimizar eficazmente tu flujo de trabajo.

¡Sigue leyendo y potencia tus habilidades en la línea de comandos!

Prerrequisitos

Asegúrate de tener lo siguiente para seguir la demostración práctica en este tutorial:

  • A command line interface (e.g., Terminal on macOS or Linux) – This tutorial uses Ubuntu Linux 20.04, but the commands should work on most popular operating systems.
  • A text editor (e.g., nano, vi, or Sublime Text) – This tutorial uses Nano.

Instalación de sed en Ubuntu

sed generalmente se incluye como una utilidad estándar en la mayoría de los sistemas operativos tipo Unix, incluyendo Linux y macOS. Pero de todos modos, verificar si ya tienes sed en tu sistema estaría bien y es un procedimiento básico antes de realizar transformaciones de texto.

1. Abre tu terminal y ejecuta el siguiente comando sed para verificar qué versión de sed está instalada en tu sistema.

sed --version

Si sed está instalado, verás el número de versión de sed y alguna información sobre la compilación, como se muestra a continuación.

Verifying sed’s installed version

En caso contrario, verá el mensaje de error a continuación si sed no está instalado.

Este mensaje de error indica que el comando sed no se encontró en la variable de entorno PATH de su sistema.

Getting an error running sed commands

2. A continuación, ejecute el comando [apt-get update] a continuación para actualizar e instalar sed en su sistema.

Este comando obtiene la información más reciente del paquete de las fuentes de paquetes configuradas, incluyendo las dependencias, archivos y scripts del paquete. Ejecutar este comando es necesario para asegurarse de instalar la última versión de sed y cualquier otro paquete que pueda necesitar.

sudo apt-get update -y && sudo apt-get install sed -y
Installing sed on the operating system

3. Por último, ejecute el siguiente comando para verificar que el comando sed esté instalado en su sistema.

Este comando imprime la ruta completa al ejecutable de sed, que en este ejemplo es /usr/bin/sed.

Una vez que haya instalado sed y verificado que está en su PATH, puede usar el comando sed para realizar diversas transformaciones y manipulaciones de texto.

which sed
Verifying that the sed command is installed

Reemplazo de Cadenas en un Archivo de Texto

sed es un editor de secuencias popular disponible en la mayoría de los sistemas operativos tipo Unix, y una de las funciones más útiles de sed es reemplazar cadenas en un archivo de texto.

A continuación se presentan algunos escenarios, pero no se limitan a ellos, donde el reemplazo de cadenas es útil:

  • Actualizando una lista de URLs para reflejar un nuevo nombre de dominio.
  • Cambiando los IDs de productos en una base de datos o archivo CSV.
  • Formateando datos para importar en otro sistema y muchos más.

La sintaxis básica para usar `sed` es la siguiente, donde:

Placeholder Function
command Controls sed’s behavior.
options Allows you to customize the behavior of the sed command
input_file Specifies the file or text stream that you want to edit. Typically, you can specify a single file or stream, but concatenating multiple files or streams by redirection also works.
output_file Specifies the file that contains the results of your sed command. The file can be new or the same as input_file, depending on how you use sed.
sed command options input_file | output_file

Supongamos que tienes un archivo de texto llamado urls.txt que contiene una lista de URLs y deseas actualizar todas las URLs para usar un nuevo nombre de dominio.

1. Ejecuta los comandos echo a continuación para crear el archivo urls.txt en el directorio actual. Estos comandos no proporcionan salida, pero escriben textos especificados en el archivo.

echo "http://old-domain.com/page1" > urls.txt && echo "http://old-domain.com/page2" >> urls.txt && echo "http://old-domain.com/page3" >> urls.txt

2. A continuación, ejecuta el comando cat para ver el contenido del archivo urls.txt. cat urls.txt

cat urls.txt

La salida a continuación confirma las tres antiguas URLs escritas en el archivo urls.txt.

Viewing the contents of the urls.txt file

3. Ahora, ejecuta el siguiente comando para buscar y sustituir (s) todas las ocurrencias de la cadena old-domain.com con new-domain.com en el archivo urls.txt.

sed 's/old-domain.com/new-domain.com/' urls.txt

Verás que las URLs en tu archivo de entrada se han actualizado con el nuevo dominio, como se muestra.

Replacing a string in a text file

Reemplazar la N-ésima ocurrencia de una cadena

Además de la funcionalidad básica de búsqueda y reemplazo, `sed` tiene comandos integrados adicionales que te permiten realizar transformaciones de texto más complejas. Un caso de esto es reemplazar la n-ésima ocurrencia de la cadena de patrón en una sola línea de texto.

Por ejemplo, deseas actualizar el segundo campo en un archivo CSV con un nuevo valor o actualizar la tercera ocurrencia de una cadena en un volcado de base de datos.

La sintaxis básica para este comando es la siguiente donde:

  • patrón – es la cadena a reemplazar.
  • reemplazo – es la cadena a utilizar como reemplazo.
  • n – is the nth occurrence of the string to replace (e.g., 1=first occurrence, 2=second occurrence…).
sed 's/pattern/replacement/n' input_file

Para ver cómo reemplazar la n-ésima ocurrencia de una cadena, siga estos pasos:

Ejecute el siguiente comando echo para crear una línea de texto con tres ocurrencias del patrón rápido. El comando sed luego reemplaza (s) la segunda ocurrencia (2) del patrón rápido con la cadena rápido.

echo "The quick and quick and quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2'

Como puede ver a continuación, solo la segunda ocurrencia del patrón rápido ha sido reemplazada con la cadena r{á}pido, mientras que todas las demás ocurrencias permanecen sin cambios.

El comando nth es sensible a mayúsculas y minúsculas de forma predeterminada. Como resultado, el comando solo busca la coincidencia exacta del patrón. Para ignorar la diferencia de mayúsculas y minúsculas del patrón, vaya al siguiente paso.

Replacing the nth occurrence of a string

? Tenga en cuenta que el comando nth cuenta las ocurrencias del patrón de izquierda a derecha. Además, el comando nth solo funciona en una sola línea de texto. Para realizar una sustitución en varias líneas, utilice un método diferente que se muestra en la siguiente sección.

A continuación, ejecute el siguiente comando para reemplazar la segunda (2) ocurrencia del patrón rápido con rápido ignorando (i) la diferencia de mayúsculas y minúsculas.

La opción i resulta útil al trabajar con texto con capitalización inconsistente.

echo "The Quick and QuiCk and Quick brown fox jumps over the lazy dog" | sed 's/quick/fast/2i'

En la salida a continuación, la segunda ocurrencia de la palabra rápida (QuiCk) se reemplaza con éxito por la cadena rápido — sin importar la mayúscula o minúscula.

Replacing the nth occurrence of a string while ignoring the letter case

Reemplazar Todas las Ocurrencias de un Patrón/Cadena Coincidente

En lugar de reemplazar la enésima ocurrencia de una cadena, tal vez planeas reemplazar todas sus ocurrencias. Hacerlo ayuda de manera significativa con tu plan de actualizar masivamente cada aparición de una cadena de Copyright con el año actual, por ejemplo.

1. Crea un archivo llamado input.txt con el siguiente contenido en tu editor de texto preferido.

This is a quick test.
The quick brown fox jumps over the lazy dog.
Quick, you need to finish this task before it gets too late.

2. A continuación, ejecuta el siguiente comando para reemplazar (s) todas las ocurrencias de la palabra rápida con rápido en el archivo input.txt. Una vez reemplazados, los cambios se escriben en el archivo output.txt.

sed 's/quick/fast/g' input.txt > output.txt

3. Ahora, ejecuta el siguiente comando para ver el contenido del archivo output.txt y verificar si se ha realizado el reemplazo.

cat output.txt

Verás que todas las ocurrencias de la palabra rápida se han reemplazado por rápido, como se muestra a continuación. Similar al comando nth, el comando g distingue entre mayúsculas y minúsculas y reemplaza solo las coincidencias exactas.

La cadena Quick no se reemplazará, como se muestra a continuación, pero puedes usar la opción i para realizar sustituciones sin distinción entre mayúsculas y minúsculas.

Replacing All the Occurrences of a Matching Pattern/String

Reemplazar una Cadena de Patrón Coincidente en una Línea Específica

Quizás ya sepas en qué línea de la cadena quieres reemplazar. ¿Por qué reemplazar todas las ocurrencias si puedes reemplazar cadenas en líneas específicas? Esta característica es útil al realizar cambios en una línea particular en un archivo o secuencia, pero dejando las otras líneas intactas.

A continuación se muestra la sintaxis para reemplazar una cadena desde una línea específica, donde n representa el número de línea.

sed 'n s/pattern/replacement/' input_file output_file

1. Crea un archivo llamado myfile.txt con el siguiente contenido.

test1
test2
test3

2. Luego, ejecuta el siguiente comando sed para realizar lo siguiente:

  • Buscar la palabra test2 desde la segunda línea (2) del archivo myfile.txt. Reemplazar (s) la palabra test2 con test2_changed.Escribir los cambios (>) en un nuevo archivo llamado myfile_changed.txt.

This command does not provide output to the terminal since the changes are written to a new file. But you will verify the changes in the following step.

sed '2 s/test2/test2_changed/' myfile.txt > myfile_changed.txt

3. Por último, ejecuta el siguiente comando cat para ver el contenido del archivo myfile_changed.txt.

cat myfile_changed.txt

Como puedes ver a continuación, la segunda línea del archivo myfile.txt ha sido reemplazada con test2_changed, mientras que todas las demás líneas permanecen sin cambios.

Verifying the changed string on a specific line

Exclusivamente Sacando las Líneas Cambiadas de las Cadenas

En lugar de imprimir todo el contenido de un archivo después de realizar cambios, es posible que desees imprimir exclusivamente las líneas cambiadas. ¿Cómo? Usando la bandera p junto con la opción -n.

A continuación se muestra la sintaxis para imprimir exclusivamente las líneas cambiadas de las cadenas donde:

  • La opción -n le indica a sed que suprima el comportamiento predeterminado de imprimir cada línea.
  • La bandera p indica a sed que imprima la salida del comando.
sed -n 's/pattern/replacement/p' input_file output_file

Abre tu archivo myfile.txt y reemplaza el contenido con lo siguiente. Observa que la segunda línea es incorrecta ya que la palabra first debería ser second en su lugar.

This is the first line of my file.
This is the first line of my file.
This is the third line of my file.

Ahora, ejecuta el siguiente comando sed para reemplazar la cadena first con second en la segunda línea (2) del archivo myfile.txt pero solo muestra las líneas modificadas (p).

sed -n '2 s/first/second/p' myfile.txt

Verás la salida de la segunda línea modificada solo en tu terminal, como se muestra a continuación.

Outputting changed lines exclusively

Conclusión

En este tutorial, has utilizado diferentes ejemplos de uso de sed para realizar operaciones de búsqueda y reemplazo. Además, has tocado técnicas más avanzadas, como reemplazar ocurrencias específicas y mostrar solo las líneas modificadas.

sed es una poderosa herramienta de línea de comandos que te permite realizar diversas tareas de manipulación de texto. Ya sea haciendo reemplazos globales en todo un archivo o reemplazos específicos en líneas particulares, sed hará el trabajo.

Ahora, ¿por qué no explorar más sobre expresiones regulares? Las expresiones regulares son esenciales para muchas herramientas de manipulación de texto, incluido sed. Estas expresiones ahorran tiempo y reducen el esfuerzo ejercido. ¿Cuándo? Mientras realizas búsquedas complejas y operaciones de reemplazo en grandes cantidades de texto.

Source:
https://adamtheautomator.com/sed-examples/