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 alsed
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.