GNU/Linux >> Tutoriales Linux >  >> Linux

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

Introducción

El sed (s tren ed itor) es una herramienta de transformación y análisis de texto orientada a líneas. El sed El comando utiliza un lenguaje de programación simple y expresiones regulares para procesar flujos de texto y archivos. La función más utilizada del sed el comando es sustitución de cadenas.

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

Requisitos previos

  • Acceso a la línea de comando/terminal.
  • Un archivo de texto (esta guía proporciona un example.txt archivo).
  • Comandos básicos de terminal (obtenga nuestra hoja de referencia gratuita).

sed Buscar y reemplazar sintaxis

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

sed -i 's/<search regex>/<replacement>/g' <input file>

El comando consiste en lo siguiente:

  • -i le dice al sed comando para escribir los resultados en un archivo en lugar de la salida estándar.
  • s indica el comando sustituto.
  • / es el carácter delimitador más común. El comando también acepta otros caracteres como delimitadores, lo cual es útil cuando la cadena contiene barras inclinadas.
  • <search regex> es el parámetro de búsqueda de cadena o expresión regular.
  • <replacement> es el texto de reemplazo.
  • g es el indicador de reemplazo global, que reemplaza todas las apariciones de una cadena en lugar de solo la primera.
  • <input file> 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 la coincidencia entre mayúsculas y minúsculas ni el reemplazo de archivos. El comando para el reemplazo de archivos se ve así:

sed 's/<search regex>/<replacement>/g' <input file> > <output file>

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

brew install gnu-sed

Ejecute GNU sed comando de la siguiente manera:

gsed -i 's/<search regex>/<replacement>/g' <input file>

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

Ejemplos de reemplazo de sed

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

1. Cree un archivo de texto de muestra:

nano example.txt

2. Agregue los siguientes contenidos:

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

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

Nota :Para un sed completo tutorial de comandos para Linux, consulte nuestra guía de comandos sed para Linux.

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, ejecute:

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

2. El -i la etiqueta inserta los cambios en el example.txt expediente. Verifique el contenido del archivo con el comando cat:

cat example.txt

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

Reemplazo global

Para reemplazar cada coincidencia de cadena en un archivo, agregue el g marca al script. Por ejemplo:

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

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

Hacer coincidir y reemplazar todos los casos

Para buscar y reemplazar todas las instancias de una palabra e ignorar las mayúsculas, use el I parámetro:

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

El comando reemplaza todas las instancias de la palabra barra en el texto, ignorando las mayúsculas.

Ignorar subcadenas

Agregar límites de palabras (\b ) al sed comando para ignorar las subcadenas al reemplazar cadenas en un archivo. Por ejemplo:

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

Alternativamente, cambie el delimitador para que el comando sea más fácil de leer:

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

El comando ignora las subcadenas y solo coincide con la palabra completa.

Buscar y reemplazar cadenas con barras

Escape del carácter de barra inclinada para buscar y reemplazar una cadena con barras inclinadas. Por ejemplo, para reemplazar /foo/bar/baz con /inicio/kb , use la siguiente sintaxis:

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

Alternativamente, cambie el delimitador para evitar caracteres de escape:

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

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

Buscar y reemplazar con expresiones regulares

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

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

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

Cadena de referencia encontrada

Utilice el carácter de y comercial (& ) para hacer referencia a la cadena encontrada. Por ejemplo, para agregar una barra diagonal (/ ) antes de cada instancia de foo en un archivo, use:

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

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

Crear una copia de seguridad

Para crear un archivo de copia de seguridad antes de sobrescribir el existente, agregue el .bak parámetro al -i etiqueta.

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

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

Buscar y reemplazar recursivamente

Use el comando de búsqueda para buscar archivos y combínelo con sed para reemplazar cadenas en archivos recursivamente. Por ejemplo:

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

El comando encuentra todos los archivos que comienzan con example y ejecuta el sed comando en los archivos. El comando ejecutado reemplaza todas las letras con 5 , ignorando las mayúsculas.

Conclusión

Después de leer los ejemplos de esta guía, sabe cómo usar sed para reemplazar cadenas en archivos. El sed command es una potente utilidad de manipulación de texto con muchas funciones avanzadas.

A continuación, consulte el comando awk o gawk para conocer otras herramientas de manipulación de texto.


Linux
  1. Cómo usar expresiones Awk y regulares para filtrar texto o cadenas en archivos

  2. Use el comando SED para buscar y reemplazar cadenas en archivos:¿cómo realizar esta tarea en Ubuntu?

  3. ¿Cómo usar Sed para reemplazar una cadena de varias líneas?

  4. ¿Cómo reemplazar una cadena con una cadena que contiene una barra oblicua con Sed?

  5. Buscar y reemplazar en secuencias de comandos de shell

Archivo host de Linux:¿Cómo editarlo y usarlo?

Cómo encontrar una cadena en un archivo en Linux

Cómo usar el comando SED para buscar y reemplazar cadenas en archivos

Cómo buscar y reemplazar texto, palabra o cadena en un archivo

Cómo crear y usar un archivo de intercambio en Linux

Cómo encontrar y reemplazar texto en Vim