Inicio Soporte Técnico ¿Cómo usar Sed para buscar y reemplazar una cadena en un archivo?

¿Cómo usar Sed para buscar y reemplazar una cadena en un archivo?

573
0

La utilidad sed (editor de flujo) es una herramienta de análisis y transformación de texto orientada a líneas. El comando sed utiliza un lenguaje de programación simple y expresiones regulares para procesar flujos de texto y archivos. La característica más utilizada del comando sed es la sustitución de cadenas.

Esta guía muestra cómo usar sed para buscar y reemplazar cadenas a través de ejemplos.

Prerrequisitos

  • Acceso a la línea de comandos/terminal.
  • Un archivo de texto (esta guía proporciona un archivo example.txt).
  • Comandos básicos del terminal (obtén nuestra hoja de trucos gratuita).

Sintaxis de Sed para buscar y reemplazar

La sintaxis para buscar y reemplazar texto usando el comando sed es:

sed -i 's/<regex de búsqueda>/<reemplazo>/g' <archivo de entrada>

El comando consta de lo siguiente:

  • -i indica al comando sed que escriba los resultados en un archivo en lugar de la salida estándar.
  • s indica el comando de sustitución.
  • / es el delimitador más común. El comando también acepta otros caracteres como delimitadores, lo cual es útil cuando la cadena contiene barras inclinadas.
  • <regex de búsqueda> es el parámetro de búsqueda de cadena o expresión regular.
  • <reemplazo> es el texto de reemplazo.
  • g es la bandera de reemplazo global, que reemplaza todas las ocurrencias de una cadena en lugar de solo la primera.
  • <archivo de entrada> es el archivo donde ocurre la búsqueda y el reemplazo.

Las comillas simples ayudan a evitar la expansión de metacaracteres en el shell.

La versión BDS de sed (que incluye macOS) no admite coincidencias sin distinción de mayúsculas ni reemplazo de archivos. El comando para el reemplazo de archivos es así:

sed 's/<regex de búsqueda>/<reemplazo>/g' <archivo de entrada> > <archivo de salida>

Alternativamente, instala la versión GNU de sed en macOS con homebrew:

brew install gnu-sed

Ejecuta el comando GNU sed de la siguiente manera:

gsed -i 's/<regex de búsqueda>/<reemplazo>/g' <archivo de entrada>

Reemplaza el comando sed con gsed para seguir los ejemplos a continuación.

Te recomendamos  Programa para guardar archivos adjuntos automáticamente Outlook (auto-guardar)

Ejemplos de reemplazo con Sed

Los ejemplos de esta guía utilizan un archivo de muestra para reemplazar cadenas.

    1. Crea un archivo de texto de muestra:
      nano example.txt
    2. Agrega el siguiente contenido:
      foobarbazfoobarbaz
      foo bar baz foo bar baz
      Foo Bar Baz Foo Bar Baz
      FOO BAR BAZ FOO BAR BAZ
      /foo/bar/baz /foo/bar/baz

sed para buscar y reemplazar una cadena en un archivo 1

Usa el archivo como entrada para probar los ejemplos a continuación.

Reemplazar la primera cadena coincidente:

  1. Para reemplazar la primera instancia encontrada de la palabra bar con linux en cada línea de un archivo, ejecuta:
    sed -i 's/bar/linux/' example.txt
  2. La etiqueta -i inserta los cambios en el archivo example.txt. Verifica el contenido del archivo con el comando cat:
    cat example.txt

sed para buscar y reemplazar una cadena en un archivo 2

El comando reemplaza la primera instancia de bar con linux en cada línea, incluyendo subcadenas. La coincidencia es exacta, ignorando las variaciones de capitalización.

Reemplazo global

Para reemplazar cada coincidencia de cadena en un archivo, añade la bandera g al script. Por ejemplo:

sed -i 's/bar/linux/g' example.txt

sed para buscar y reemplazar una cadena en un archivo 3

El comando reemplaza globalmente cada instancia de bar con linux en el archivo.

Haga coincidir y reemplace todos los casos

Para encontrar y reemplazar todas las instancias de una palabra e ignorar la capitalización, usa el parámetro I:

sed -i 's/bar/linux/gI' example.txt

sed para buscar y reemplazar una cadena en un archivo 4

El comando reemplaza todas las instancias de la palabra bar en el texto, ignorando la capitalización.

Ignorar subcadenas

Añade límites de palabra (\b) al comando sed para ignorar subcadenas al reemplazar cadenas en un archivo. Por ejemplo:

sed -i 's/\bbar\b/linux/gI' example.txt

Alternativamente, cambia el delimitador para hacer el comando más fácil de leer:

sed -i 's:\bbar\b:linux:gI' example.txt

sed para buscar y reemplazar una cadena en un archivo 5

El comando ignora subcadenas, coincidiendo solo con la palabra completa.

Buscar y reemplazar cadenas con barras

Escapa el carácter de barra inclinada para buscar y reemplazar una cadena con barras. Por ejemplo, para reemplazar /foo/bar/baz con /home/kb, usa la siguiente sintaxis:

sed -i 's/\/foo\/bar\/baz/\/home\/kb/g' example.txt

Alternativamente, cambia el delimitador para evitar escapar caracteres:

sed -i 's:/foo/bar/baz:/home/kb:g' example.txt

sed para buscar y reemplazar una cadena en un archivo 6

Usa esta sintaxis para reemplazar rutas y otras cadenas con barras.

Te recomendamos  AdminPAQ - Realizar cierre de ejercicio fiscal

Buscar y reemplazar con expresiones regulares

El patrón de búsqueda para el comando sed acepta expresiones regulares, similares a grep regex. Por ejemplo, para coincidir con todas las letras mayúsculas y reemplazarlas con 5, usa:

sed -i 's/[A-Z]/5/g' example.txt

sed para buscar y reemplazar una cadena en un archivo 7

El patrón regex ayuda a encontrar todas las letras mayúsculas y las reemplaza con el número en el archivo.

Referencia a la cadena encontrada

Usa el carácter ampersand (&) para hacer referencia a la cadena encontrada. Por ejemplo, para agregar una barra inclinada (/) antes de cada instancia de foo en un archivo, usa:

sed -i 's/foo/\/&/gI' example.txt

sed para buscar y reemplazar una cadena en un archivo 8

En lugar de volver a escribir el parámetro de búsqueda, el signo & hace referencia a la cadena encontrada.

Crea una copia de seguridad

Para crear un archivo de copia de seguridad antes de sobrescribir el existente, añade el parámetro .bak a la etiqueta -i.

sed -i.bak 's/foo/FOO/g' example.txt

sed para buscar y reemplazar una cadena en un archivo 9

El comando crea una copia de seguridad (example.txt.bak) antes de sobrescribir el original. Usa este método para mantener una copia en el formato original y evitar sobrescribir.

Buscar y reemplazar de forma recursiva

Usa el comando find para buscar archivos y combínalo con sed para reemplazar cadenas en archivos de forma recursiva. Por ejemplo:

find -name 'example*' -exec sed -i 's/[a-z]/5/gI' {} +

sed para buscar y reemplazar una cadena en un archivo 10

El comando encuentra todos los archivos que comienzan con example y ejecuta el comando sed en los archivos. El comando ejecutado reemplaza todas las letras con 5, ignorando la capitalización.

Después de revisar los ejemplos en esta guía, sabes cómo usar sed para reemplazar cadenas en archivos. El comando sed es una poderosa utilidad de manipulación de texto con muchas características avanzadas.