Encuentre y reemplace cadenas complejas usando Sed con Regex

Nilesh Katuwal 30 enero 2023
  1. Buscar y reemplazar cadenas usando sed en Bash
  2. Encuentre y reemplace el carácter delimitador / en una cadena en Bash
  3. Encuentre todos los números y reemplácelos con el número de cadena en Bash
Encuentre y reemplace cadenas complejas usando Sed con Regex

Cuando trabaje con archivos de texto, con frecuencia necesitará identificar y reemplazar cadenas de texto en uno o más archivos.

sed es un editor de secuencias. Puede realizar una manipulación de texto rudimentaria en archivos y flujos de entrada, como canalizaciones. Puede usar sed para buscar, encontrar y reemplazar palabras y líneas, así como insertarlas y eliminarlas.

Se admiten regex básicas y extendidas, lo que le permite hacer coincidir patrones complejos. En esta publicación, veremos cómo usar sed para buscar y reemplazar cadenas. También demostraremos cómo usar la búsqueda recursiva y el reemplazo.

Buscar y reemplazar cadenas usando sed en Bash

Hay varias versiones de sed, cada una con sus características.

Las distribuciones de Linux vienen con GNU sed preinstalado de forma predeterminada, pero Mac OS utiliza la versión BSD. Vamos a utilizar la versión GNU.

La sintaxis se usa para buscar y reemplazar texto con sed:

sed -e 's/Search_Regex/substitution/g' Filename

En la sintaxis anterior utilizada, las siguientes son la definición:

  • La -e es la salida de sed escrita en la salida estándar por defecto. Este parámetro instruye a sed para editar archivos en su ubicación actual. Si se define una extensión, se genera un archivo de reemplazo.
  • El /// es un carácter que actúa como separador. Aunque la mayoría de la gente usa el carácter de barra inclinada (/), puede ser cualquier carácter.
  • El Search_Regex es para buscar algo. Usaremos una regex o una cadena normal.
  • La substitution se utiliza como cadenas para sustituir.
  • La g es una bandera de sustitución global. El sed lee el archivo línea por línea de forma predeterminada y solo altera la primera aparición de Search_Regex en cada línea. Todas las instancias se reemplazan cuando se establece el indicador de reemplazo.
  • El Filename es el nombre del archivo que debe ejecutar el comando.

Veamos los parámetros y las banderas de uso común para usar el comando sed para buscar y reemplazar texto en archivos. Usaremos el archivo de ejemplo que hemos creado para fines de demostración, es decir, live.txt.

live.txt 
Omicron is the endgame of Covid and Omicron 9876

Si se ignora el indicador g, solo se reemplaza la primera instancia de la cadena de búsqueda en cada línea.

$ sed -e 's/endgame/infinitywar/' live.txt

Producción :

Omicron is the infinitywar of Covid and Omicron 9876

El sed reemplaza todas las ocurrencias del patrón de búsqueda con el indicador de reemplazo global:

$ sed -e 's/Omicron/thanos/g' live.txt

Producción :

thanos is the endgame of Covid and thanos 9876

Como habrás podido observar, la cadena Omicron ha sido sustituida por thanos.

Encuentre y reemplace el carácter delimitador / en una cadena en Bash

Debe usar la barra invertida \ para escapar de la barra si desea descubrir y reemplazar una cadena que contiene el carácter delimitador /. Por ejemplo, para reemplazar /bin/bash con/usr/bin/zsh, use lo siguiente:

$ sed -e 's/\/bin\/bash/\/usr\/bin\/zsh/g' live.txt

Producción :

Omicron is the endgame of Covid and Omicron 9876

Hagámoslo más fácil de entender usando una barra vertical | o dos puntos :, aunque cualquier otro carácter será suficiente.

$ sed -e 's|/bin/bash|/usr/bin/zsh|g' live.txt

Producción :

Omicron is the endgame of Covid and Omicron 9876

Como puede ver, el resultado es idéntico al anterior.

Encuentre todos los números y reemplácelos con el número de cadena en Bash

Las expresiones regulares también pueden encontrar los cuatro números y reemplazarlos con el número de cadena. Por ejemplo:

$ sed -e 's/\b[0-9]\{4\}\b/number/g' live.txt

Producción :

Omicron is the endgame of Covid, and Omicron number

Como puede ver, el 9876 se reemplaza por la cadena number.

Por último, pero no menos importante, siempre que use sed para editar un archivo, siempre debe hacer una copia de seguridad. Dale a la opción -i una extensión para el archivo de respaldo para lograr esto.

Por ejemplo, edite live.txt y guarde el archivo original como live.txt. Si tuviera que utilizar bak, lo haría de la siguiente manera:

$ sed -i.bak 's/Omicron/thanos/g' live.txt

Enumere los archivos con el comando ls para asegurarse de que se creó la copia de seguridad:

$ ls

Producción :

live.txt
live.txt.bak 

Aunque pueda parecer complicado al principio, encontrar y cambiar el texto en archivos con sed es relativamente sencillo.