Cómo utilizar el comando sed de Linux en 2024: ejemplos útiles y casos de uso

Cómo utilizar el comando sed de Linux en 2024: ejemplos útiles y casos de uso

El comando sed de Linux te permite buscar, sustituir, insertar y eliminar líneas en un archivo sin abrirlo con un editor de texto. Adecuado para entradas canalizadas y varios formatos de archivo, este comando de Linux también utiliza expresiones regulares o regex, permitiéndote buscar y manipular patrones complejos.

Con sus diferentes casos de uso, comprender cómo funciona sed de Linux puede ayudar a los administradores de sistemas a gestionar eficazmente sus servidores privados virtuales (VPS).

Este artículo te explicará la sintaxis general, las opciones y los subcomandos del comando sed de Linux. También aprenderás varios ejemplos de sed y casos de uso para gestionar un VPS Linux.

Opciones del comando sed

Así es la sintaxis general del comando sed:

sed options 'script' nombre_archivo

Para modificar el comportamiento de los comandos sed, añade las siguientes opciones a la línea de comandos:

  • -help: imprime información sobre el uso del comando.
  • -debug: permite al Terminal anotar la ejecución y la entrada del programa.
  • -i: sobrescribe el fichero original.
  • -n: desactiva la impresión automática a menos que el usuario utilice el comando p.
  • -u: minimiza la salida.
  • -posix: desactiva las extensiones sed de POSIX para simplificar la escritura de scripts portables.
  • -e: especifica que varios comandos se ejecuten secuencialmente.
  • -b: abre los archivos de entrada en modo binario.
  • -l: establece la longitud de salto de línea deseada para el comando l.

El script contiene el subcomando, el patrón de búsqueda, la cadena de sustitución y la bandera. Estos elementos se encapsulan entre apóstrofes y se separan mediante un delimitador, como una barra inclinada (/), una barra invertida (\) o una barra vertical (|).

Su orden puede variar en función del subcomando. Por ejemplo, el comando s o sustituir sustituye un patrón de expresión regular por otra cadena. Esta es la sintaxis:

's/regex_pattern/new_pattern/flags'

Para modificar la sustitución de patrones, utiliza las siguientes banderas:

  • g: aplica el reemplazo global, no sólo a la primera ocurrencia.
  • Número: especifica qué números de línea modificar.
  • p: imprime la nueva línea tras una sustitución de patrón correcta.
  • i: hace que la sustitución distinga entre mayúsculas y minúsculas.

Consejo profesional

El subcomando s admite varias banderas. Por ejemplo, añade la bandera gi para activar una sustitución global que distinga entre mayúsculas y minúsculas.

¿Cómo instalar sed de Linux?

El paquete del editor de flujo de Linux viene preinstalado en la mayoría de las distribuciones. Si tu sistema no tiene la herramienta, sigue estos pasos para instalarla:

¡Importante! En este tutorial, nuestro VPS ejecuta Ubuntu 20.04. Si utilizas otra distribución o versión, los comandos pueden diferir.

  1. Conéctate a tu VPS utilizando un cliente SSH como PuTTY o por el Terminal. Los usuarios de Hostinger pueden utilizar el Terminal del navegador a través de hPanel.
  2. Introduce tus credenciales de acceso root. En hPanel, se encuentran en la pestaña de acceso SSH del menú general del VPS.
  3. Actualiza el repositorio escribiendo este comando:
sudo apt-get update
  1. Instala el paquete sed introduciendo el siguiente comando:
sudo apt-get install sed
  1. Ejecuta el siguiente comando para comprobar si la instalación se ha realizado correctamente:
sed --versión
Comando sed de Linux

Ejemplos del comando sed

En las siguientes secciones, presentaremos 10 ejemplos de comandos del editor de secuencias para ayudarte a comprender sus funciones.

¡Importante! Todos los comandos que aparecen a continuación no alteran el archivo original. Para aplicar los cambios directamente, añade la opción -i.

Utilizar sed para buscar y reemplazar una cadena

El comando sed se utiliza habitualmente para sustituir texto. Esta herramienta buscará el patrón especificado en un archivo y lo cambiará por la cadena deseada.

Para ello, utiliza el comando s con la cadena que quieras sustituir y su sustituto. Esta es la sintaxis:

sed 's/old_string/new_string/' ejemploarchivo.txt

Cambia los marcadores de posición por el valor real. Por ejemplo, este comando sustituye la palabra «imágenes» por «fotos» en el archivo escenario.txt:

sed 's/imágenes/fotos/' escenario.txt
Ejemplo sed para buscar y reemplazar una cadena

Si tu cadena contiene el símbolo de la barra inclinada, utiliza otro delimitador, como una barra invertida (\) o una barra vertical (|).

Utilizar sed para reemplazar la enésima aparición de un patrón en una línea

Si un patrón de una línea aparece varias veces, introduce la siguiente sintaxis de comando para sustituir uno en concreto:

sed 's/old_string/new_string/#' ejemploarchivo.txt

Sustituye el símbolo numeral (#) por el número de secuencia del patrón. Por ejemplo, este comando sustituye la primera aparición de la palabra «música» por «canción» en una línea dentro del archivo playlist.txt:

sed 's/música/canción/1' playlist.txt
Ejemplo sed para reemplazar la enésima aparición de un patrón en una línea

Utilizar sed para reemplazar todas las ocurrencias del patrón en una línea

Por defecto, el comando sed sólo sustituye la primera instancia de la cadena especificada y pasa a la siguiente línea de entrada. Para sustituir todos los patrones coincidentes en la misma línea, añade la bandera g. Este es el aspecto del script sed:

sed 's/old_string/new_string/g' ejemploarchivo.txt

Por ejemplo, ejecuta lo siguiente para sustituir todas las apariciones que contengan «águila» por «halcón» en una línea dentro de animales.txt:

sed 's/aguila/halcon/g' animales.txt
Ejemplo de sed para reemplazar todas las ocurrencias del patrón en una línea

Utilizar sed para sustituir una ocurrencia de la enésima a todas las ocurrencias de una línea

En lugar de sustituir todos los patrones dentro de la misma línea, combina el número y la bandera g para sustituir las ocurrencias a partir de una específica. Aquí tienes el script sed:

sed 's/old_string/new_string/#g' ejemploarchivo.txt

Por ejemplo, el comando siguiente sustituye la palabra «piscis» por «acuario» desde la segunda aparición hasta la última en el archivo astrología.txt.

sed 's/piscis/acuario/2g' astrologia.txt
Ejemplo sed para sustituir una ocurrencia de la enésima

Utilizar sed para poner entre paréntesis el primer carácter de cada palabra

Para imprimir el primer carácter de cada palabra entre paréntesis, utiliza el siguiente script:

echo "frase_deseada" | sed -E 's/(\b\w)/(\1)/g'

Por ejemplo, para mostrar el primer carácter de «Un ejemplo del comando sed» entre paréntesis, introduce:

echo "Un ejemplo del comando sed" | sed -E 's/(\b\w)/(\1)/g
Ejemplo sed para poner entre paréntesis el primer carácter

Para poner entre paréntesis el primer carácter de cada palabra de un archivo, omite el comando echo y añade el documento de entrada al final.

Utilizar sed para sustituir la cadena en un número de línea específico

Para sustituir la cadena de una enésima línea, añade su número de secuencia antes de s como en esta sintaxis:

sed '#s/old_string/new_string/' ejemploarchivo.txt

Por ejemplo, introduce lo siguiente para sustituir la palabra «torta» por «pan» en la segunda línea de comidas.txt:

sed '2s/torta/pan/' alimentos.txt
Ejemplo sed para sustituir la cadena en un número de línea específico

Utilizar sed para duplicar la línea sustituida con la bandera /p

Para imprimir las líneas que modificó tu comando sed como salida adicional, utiliza la bandera p o print. Ésta es la sintaxis general:

sed 's/old_string/new_string/p' ejemploarchivo.txt

Por ejemplo, ejecuta lo siguiente para sustituir «teléfonos» por «tabletas» en el archivo gadgets.txt e imprime los resultados:

sed 's/telefonos/tabletas/p' gadgets.txt
Ejemplo sed para duplicar la línea sustituida con la bandera /p

Terminal imprimirá la cadena original si la línea no contiene el patrón de búsqueda y no se sustituye.

Utilizar sed para sustituir la cadena de un rango de líneas

El comando sed te permite modificar sólo los números de línea especificados en el script añadiendo el rango. Ésta es la sintaxis:

sed '#,# s/old_string/new_string/' ejemploarchivo.txt

Por ejemplo, el comando siguiente sustituye «alemania» situado en la tercera, cuarta y quinta línea del archivo paises.txt por «francia«:

sed '3,5 s/alemania/francia/' paises.txt
Ejemplo sed para sustituir la cadena de un rango de líneas

Utilizar sed para imprimir sólo las líneas sustituidas

Por defecto, el editor de secuencias imprime todo el contenido del archivo. Para simplificar la salida, combina la opción -n con el comando p para mostrar sólo las líneas coincidentes. Ésta es la sintaxis general:

sed -n 's/old_string/new_string/p' ejemploarchivo.txt

Por ejemplo, para sustituir la tercera instancia de «verde» por «azul» en una línea dentro del archivo colores.txt e imprimir las líneas modificadas en la ventana del terminal, introduce:

sed -n 's/verde/azul/3p' colores.txt
Ejemplo sed para imprimir sólo las líneas sustituidas

Utilizar sed para borrar líneas de un archivo concreto

El comando d o borrar te permite eliminar líneas de un archivo sin necesidad de un editor de texto. Por ejemplo, utiliza la siguiente sintaxis para eliminar un número de línea concreto:

sed '#d' ejemploarchivo.txt

Sustituye el símbolo numeral (#) por el número de línea que quieras eliminar. Por ejemplo, ejecuta este comando para eliminar la primera línea del archivo ciudades.txt:

sed '1d' ciudades.txt

Además, puedes eliminar todas las líneas dentro de un rango concreto utilizando el comando sed:

sed '#,#d' ejemploarchivo.txt

Sustituye los símbolos numerales (#) por los números de línea inicial y final. Por ejemplo, introduce lo siguiente para borrar de la primera a la tercera línea del archivo coches.txt:

sed '1,3d' coches.txt

También puedes eliminar la última línea de un archivo combinando el subcomando d y un signo de dólar ($), como se indica a continuación.

sed '$d' ejemploarchivo.txt

Para borrar un número de línea concreto empezando por la última, utiliza la siguiente sintaxis:

sed '#,$d' ejemploarchivo.txt

Por ejemplo, este comando eliminará la penúltima línea del archivo libros.txt:

sed '2,$d' libros.txt

Además de borrar líneas, utiliza este comando para eliminar una ocurrencia concreta en un archivo. Para ello, especifica el patrón regex en tu script, como en la siguiente sintaxis:

sed '/patrón/d' ejemploarchivo.txt

Por ejemplo, ejecuta esto para eliminar el patrón «oabo» del archivo cadenasdearchivos.txt:

sed '/oabo/d' cadenasdearchivos.txt

Casos prácticos del comando sed

En esta sección, explicaremos cómo utilizar los comandos sed para diferentes casos de uso en la gestión de servidores.

Usar sed para el procesamiento por lotes de archivos

En general, hay dos formas de editar archivos en bloque utilizando el comando sed.

Primero, especifica los archivos individualmente. Con este método, enumerarás todos los archivos de entrada que quieras sustituir al final de tu comando, separados mediante espacios. Ésta es la sintaxis:

sed 's/old_string/new_string/g' nombrearchivo1.txt nombrearchivo2.txt

El comando buscará y sustituirá simultáneamente todas las apariciones de old_string en los dos archivos de texto.

En segundo lugar, escanéalos utilizando el comando find o encontrar. Este método busca automáticamente en un directorio los archivos que contengan el patrón especificado. Ésta es la sintaxis:

find /directory/path/file -type f -exec sed -i 's/old_string/new_string/g' {} \;

Sustituye /directory/path/file por el directorio que contiene los archivos que quieres procesar.

Cuando utilices el segundo método, crea un archivo de copia de seguridad para restaurarlo fácilmente en caso de sustituciones accidentales. Alternativamente, omite la opción -i para desactivar la edición en el sitio y mantener inalterado el archivo original.

Usar sed para analizar archivos de registro

Además de modificar patrones, el comando sed en Linux también es útil para el análisis de registros. Te permite buscar fácilmente un patrón concreto en el archivo de registro y extraer los resultados para facilitar el diagnóstico.

Para ello, añade el símbolo > para enviar los patrones coincidentes a un archivo de texto. Aunque el comando difiere en función de tu uso, la sintaxis básica sigue siendo la siguiente:

sed -n 's/pattern/p' logfile.log > extracted_data.txt

Cambia el patrón regex según los datos que quieras buscar, como la dirección IP, el mensaje de error o la marca de tiempo. Por ejemplo, utiliza este script para exportar los errores registrados:

sed -n 's/Error: \(.*\)/\1/p' logfile.log > error_logs.txt

Usar sed para manipular etiquetas HTML/XML

El comando sed en Linux te permite sustituir fácilmente cadenas en el código. Por ejemplo, puedes buscar etiquetas HTML o XML específicas y sustituir sus atributos utilizando el comando de sustitución. Esta es la sintaxis:

sed 's/<tag attribute="old_pattern">/<tag attribute="new_pattern"/' archivo.html

El comando varía en función de las etiquetas y atributos que quieras cambiar. Por ejemplo, este comando sed cambia todos los atributos de color de las etiquetas de encabezado a negro:

sed 's/\(<h[1-6].*color:\) [^;]*/\1 black/g' sitioweb.html

El comando buscará el siguiente patrón de código HTML y sustituirá el valor del color por la nueva cadena:

<h1 style="color: value;">Heading 1</h1>

Usar sed para archivos externos

Las operaciones complejas del comando sed pueden contener varios scripts. Aunque puedes añadirlos en un solo comando con la opción -e, es difícil de escribir y propenso a errores.

Como alternativa, crea un archivo SED externo que contenga varios guiones. Éste es el proceso:

  1. Ejecuta el comando nano para crear un nuevo archivo script y abre el editor de texto. Sustituye script por el nombre de archivo que desees:
nano script.sed
  1. Escribe tus guiones y asegúrate de que cada línea contiene un guión sin apóstrofes, como el siguiente:
s/old_pattern1/new_pattern1/g
/old_pattern2/d
  1. Pulsa Ctrl+X e Y para cerrar el editor y guardar el archivo.
  2. Ejecuta los guiones añadiendo el archivo mediante la opción -f en tu comando. La sintaxis es la siguiente:
sed -f script.sed archivo_destino.txt

Usar sed para retro-referencias en regex

Las referencias retrospectivas, regex, te permiten referirte a patrones previamente emparejados y reutilizarlos en la nueva cadena. Esto elimina la necesidad de reescribir el patrón regex, simplificando el script.

El patrón utilizado como referencia del comando sed se denomina grupo de captura. Encapsulado entre paréntesis, también incluye barras para expresiones regulares ampliadas.

Para referirte al grupo de captura, utiliza una barra invertida (\) y un número que indique el orden del patrón. Por ejemplo, la referencia inversa \1 reutilizará el primer patrón regex capturado.

Las referencias retrospectivas son útiles para sustituir y reordenar patrones. Por ejemplo, este comando sed las utiliza para reordenar apellidos y nombres:

echo "Doe, John" | sed 's/\(.*\), \(.*\)/\2 \1/'

Los dos patrones regex \(.*\) capturan a Doe y John, estableciéndolos como referencia. Como la nueva cadena empieza con la segunda referencia retrospectiva, el nuevo valor será Juan Luis.

Ejemplo sed para retro-referencias en regex

Conclusión

El editor de secuencias o comando sed en Linux es una herramienta que te permite encontrar y modificar un patrón en un archivo utilizando expresiones regulares. Su sintaxis comprende el comando sed, las opciones, el script y el archivo de destino.

Las opciones de la línea de comandos sed modifican el comportamiento de la herramienta, mientras que el script determina cómo modifica la herramienta el patrón regex coincidente. El script contiene un subcomando, banderas y los patrones regex, cada uno separado por un delimitador como una barra (/).

Para utilizar el comando sed en Linux, abre aplicaciones de línea de comandos como Terminal, un cliente SSH o el navegador Terminal de Hostinger. Para buscar y reemplazar un patrón, utiliza el subcomando s. Mientras tanto, el subcomando d borra líneas o cadenas.

El comando sed en Linux también es útil para analizar registros, modificar etiquetas de marcado y procesar archivos en bloque. Además, admite regex backreferences y te permite utilizar un archivo de script para ejecutar varios comandos Linux simultáneamente.

Esperamos que hayas entendido qué hace el comando sed en Linux. Si tienes comentarios o dudas, escríbelas más abajo.

Comando sed de Linux – Preguntas frecuentes

Esta sección responderá a las preguntas más comunes sobre el comando sed.

¿En qué se diferencia sed de grep?

Tanto sed como grep son herramientas de procesamiento de texto en Linux. 

Sin embargo, grep no admite comandos de transformación de texto ni de manipulación de líneas, como la sustitución. Se utiliza principalmente para encontrar patrones de texto concretos en archivos grandes e imprimir el resultado.

¿Cómo se utiliza el comando sed en Bash?

En el script Bash, el comando sed tiene tres usos principales: imprimir en stdout, borrar un texto y sustituir una cadena específica. 

El programa determina qué línea procesará a partir del rango de direcciones especificado.

¿Cómo se llama a una variable en el comando sed?

Una variable es un carácter al que asignamos un valor, lo que proporciona una mejor legibilidad cuando se añade a un comando sed. 

Puede ser un número, un carácter, un nombre de archivo o un dispositivo. El shell expande las variables. 

Por ejemplo, si la cadena contiene una barra inclinada (/), utiliza otro delimitador, como una barra vertical (|).

¿En qué se diferencia el comando sed de awk?

El comando sed sirve para la modificación básica de texto, como sustituir, eliminar e insertar un patrón en un archivo de entrada.

Mientras tanto, awk se utiliza para tareas complejas como la extracción de datos, la manipulación de texto y los cálculos matemáticos. 

También admite sentencias de programación como if/else y do/while.

Author
El autor

Deyimar A.

Deyi es una entusiasta del marketing digital, con experiencia en diseño de páginas web, creación de contenido, copywrite y SEO. Forma parte del equipo de SEO & Localization de Hostinger. En su tiempo libre, le gusta desarrollar proyectos, leer un libro o ver una buena película.