Encuentre y reemplace cadenas complejas usando Sed con Regex
- 
          
            Buscar y reemplazar cadenas usando 
seden 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 
-ees la salida de sed escrita en la salida estándar por defecto. Este parámetro instruye asedpara 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_Regexes para buscar algo. Usaremos unaregexo una cadena normal. - La 
substitutionse utiliza como cadenas para sustituir. - La 
ges una bandera de sustitución global. Elsedlee el archivo línea por línea de forma predeterminada y solo altera la primera aparición deSearch_Regexen cada línea. Todas las instancias se reemplazan cuando se establece el indicador de reemplazo. - El 
Filenamees 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.