Sed regex reemplazar

Sed regex reemplazar

En Unix/Linux, SED es un comando dedicado para editar transmisiones. Aquí es donde viene el nombre del comando (editor de transmisión). Toma una secuencia como entrada, filtros y transforma su contenido, y genera el resultado según las instrucciones.

En esta guía, echaremos un vistazo al uso de SED con las expresiones regulares (regex para abreviar) para reemplazar el contenido en un archivo de texto. Esta guía utilizará la versión GNU/Linux de SED.

Agarrando un archivo de texto de muestra

Para fines de demostración, creamos un archivo de texto simple con algún texto para practicar nuestros comandos SED. Cree un archivo de texto usando Nano:

$ nano sed-práctica.TXT

Dentro del archivo, ingrese el siguiente texto:

#!/bin/bash
Echo "The Quick Brown Fox"
Echo "salta sobre el perro perezoso"

Reemplazar textos usando SED

La estructura de comando principal de SED para reemplazar textos es la siguiente:

$ sed -i 's /// g'

Aquí:

  • -I: El comportamiento predeterminado de SED es escribir la salida al STDOUT (salida estándar). Sin embargo, esta bandera le dice a SED que edite los archivos en su lugar. Si también se proporciona una extensión (por ejemplo, -i.bak), se crea una copia de seguridad del archivo original.
  • S: instruye a SED que realice una operación sustituta en la corriente dada.
  • /: El personaje delimitador.
  • : Una expresión regular para que SED coincida en la corriente dada.
  • : La cadena de reemplazo.
  • G: Flag que le indique a SED que realice un reemplazo global. Por defecto, SED solo coincide y reemplaza la primera instancia.

Vamos a probarlo. En el siguiente ejemplo, reemplazamos el con EL en la práctica de sed.TXT:

$ sed -i 's/the/the/g' sed -práctica.TXT

Verificar los cambios.

$ Cat Sed-Practice.TXT

Como puede ver, cambiamos con éxito el contenido del archivo.

Trabajando con caracteres delimitadores

Como se describe en la sección anterior, las instrucciones SED vienen con caracteres delimitadores para separar las diversas partes. Si queremos reemplazar los textos que contienen el carácter delimitador, tenemos que usar la barra de back -slash (\) para escapar de él.

Echemos un vistazo al siguiente ejemplo:

$ sed -i 's/\/bin \/bash/\/usr \/bin \/zsh/g' sed -práctica.TXT

Aquí, reemplazamos el/bin/bash con/usr/bin/zsh. Verifique si el intento es exitoso.

$ Cat Sed-Practice.TXT

Usando este patrón en zigzag del delantero y las versas de fondo, puede volverse extremadamente confuso. Por eso es una práctica común usar otros delimitadores como el colon (:) o la barra vertical (|). Reescribamos el comando usando la barra vertical como delimitador:

$ sed -i 's |/usr/bin/zsh |/bin/bash | g' sed -práctica.TXT

Conjuntos de personajes regex

Podemos usar los conjuntos de caracteres para describir un conjunto de caracteres para reemplazar en SED. Aquí hay algunos conjuntos de personajes comunes que te encontrarás:

  • [A-Z]: todos los alfabetos en minúsculas.
  • [A-Z]: todos los alfabetos mayúsculas.
  • [0-9]: todos los dígitos.

En el siguiente ejemplo, reemplazamos todos los dígitos con el alfabeto. Eche un vistazo al siguiente ejemplo:

$ Echo 1001001 | sed -e 's | [0-9] | k | g'

Aquí, SED reemplaza todos los dígitos (1 y 0, en este caso) encuentra con la letra K.

¿Qué pasa si queremos reemplazar 1 con A y 0 con B? Aquí hay una forma de lograr esto:

$ Echo 1001001 | sed -e 's | 1 | a | g' | sed -e 's | 0 | b | g'

Aquí, el primer comando SED reemplaza 1 con un. La salida se lanza a un segundo comando SED que reemplaza 0 con B.

Conclusión

En esta guía, demostramos brevemente las diversas formas de usar SED para encontrar y reemplazar los textos. Con la ayuda de Regex, pudimos ajustar la búsqueda y reemplazar el contenido exacto. Aprenda más sobre SED Regex.

Con la ayuda de algunas herramientas adicionales como Find, podemos usar SED incluso para modificar recursivamente los archivos de un directorio completo.

También podemos implementar SED en los scripts bash para realizar una edición de flujo más compleja. Obtenga más información sobre el viaje inicial con scripting bash.