Encuentre y reemplace cadenas complejas usando Sed con Regex
-
Buscar y reemplazar cadenas usando
sed
en Bash -
Encuentre y reemplace el carácter delimitador
/
en una cadena en Bash - Encuentre todos los números y reemplácelos con el número de cadena en Bash
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 ased
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 unaregex
o una cadena normal. - La
substitution
se utiliza como cadenas para sustituir. - La
g
es una bandera de sustitución global. Elsed
lee el archivo línea por línea de forma predeterminada y solo altera la primera aparición deSearch_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.