Cambiar cadena de caracteres dentro de un fichero en Gnu/Linux con el comando sed
Tabla de contenido:
Muy a menudo, cuando trabaje con archivos de texto, necesitará buscar y reemplazar cadenas de texto en uno o más archivos.
sed
es un s tream ed itor. Puede realizar la manipulación básica de texto en archivos y flujos de entrada, como tuberías. Con
sed
puede buscar, encontrar y reemplazar, insertar y eliminar palabras y líneas. Admite expresiones regulares básicas y extendidas que le permiten combinar patrones complejos.
, hablaremos sobre cómo encontrar y reemplazar cadenas con
sed
. También le mostraremos cómo realizar una búsqueda recursiva y reemplazar.
Buscar y reemplazar cadena con
sed
Existen varias versiones de
sed
, con algunas diferencias funcionales entre ellas. macOS usa la versión BSD y la mayoría de las distribuciones de Linux vienen con GNU
sed
preinstalado por defecto. Usaremos la versión GNU.
La forma general de buscar y reemplazar texto usando
sed
toma la siguiente forma:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
: de forma predeterminada,sed
escribe su salida en la salida estándar. Esta opción le dice ased
que edite los archivos en su lugar. Si se proporciona una extensión (ex -i.bak), se creará una copia de seguridad del archivo original.s
- El comando sustituto, probablemente el comando más utilizado en sed./ / /
- Carácter delimitador. Puede ser cualquier carácter, pero generalmente se utiliza el carácter de barra diagonal (/
).SEARCH_REGEX
: cadena normal o una expresión regular para buscar.REPLACEMENT
- La cadena de reemplazo.g
- Bandera de reemplazo global. Por defecto,sed
lee el archivo línea por línea y cambia solo la primera aparición deSEARCH_REGEX
en una línea. Cuando se proporciona el indicador de reemplazo, se reemplazarán todos los sucesos.INPUTFILE
: el nombre del archivo en el que desea ejecutar el comando.
Es una buena práctica poner comillas alrededor del argumento para que los metacaracteres del shell no se expandan.
Veamos ejemplos de cómo usar el comando
sed
para buscar y reemplazar texto en archivos con algunas de sus opciones e indicadores más utilizados.
Para fines de demostración, utilizaremos el siguiente archivo:
file.txt
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
Con la bandera de reemplazo global
sed
reemplaza todas las ocurrencias del patrón de búsqueda:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Como habrás notado, en el ejemplo anterior también se reemplaza el subcadena
foo
dentro de la cadena
foobar
. Si este no es el comportamiento deseado, use la expresión de límite de palabras (
\b
) en ambos extremos de la cadena de búsqueda. Esto asegura que las palabras parciales no coincidan.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Para que el patrón no coincida con mayúsculas y minúsculas, use la bandera
I
En el siguiente ejemplo, estamos utilizando las banderas
g
e
I
:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
La opción más fácil y mucho más legible es usar otro carácter delimitador. La mayoría de las personas usa la barra vertical (
|
) o los dos puntos (:) pero puede usar cualquier otro carácter:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
También puedes usar expresiones regulares. Por ejemplo, para buscar todos los números de 3 dígitos y reemplazarlos con el
number
cadena que usaría:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
Otra característica útil de sed es que puede usar el carácter de
&
comercial que corresponde al patrón coincidente. El personaje se puede usar varias veces.
Por ejemplo, si desea agregar llaves
{}
alrededor de cada número de 3 dígitos, escriba:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
Por último, pero no menos importante, siempre es una buena idea hacer una copia de seguridad al editar un archivo con
sed
. Para hacer eso solo proporcione una extensión a la opción
-i
. Por ejemplo, para editar el
file.txt
y guardar el archivo original como
file.txt.bak
, usaría:
sed -i.bak 's/foo/linux/g' file.txt
ls
Buscar y reemplazar recursivo
A veces, desea buscar en los directorios de forma recursiva archivos que contengan una cadena y reemplazar la cadena en todos los archivos. Esto se puede hacer mediante el uso de comandos como
find
o
grep
para buscar archivos de forma recursiva en el directorio y canalizar los nombres de los archivos a
sed
.
El siguiente comando buscará archivos de forma recursiva en el directorio de trabajo actual y pasará los nombres de archivo a
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
Para evitar problemas con los archivos que contienen espacio en sus nombres, use la opción
-print0
que le dice a
find
que imprima el nombre del archivo, seguido de un carácter nulo y canalice la salida a
sed
usando
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Para excluir un directorio, use la opción
-not -path
. Por ejemplo, si está reemplazando una cadena en su repositorio local de git para excluir todos los archivos que comienzan con punto (
.
), Use:
find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
Otra opción es usar el comando
grep
para buscar recursivamente todos los archivos que contienen el patrón de búsqueda y luego canalizar los nombres de archivo a
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
Conclusión
Aunque pueda parecer complicado y complejo, al principio, buscar y reemplazar texto en archivos con
sed
es muy simple.
Para obtener más información sobre los comandos, las opciones y los indicadores de sed, visite el manual de GNU sed y el tutorial de Grymoire sed. Si tiene alguna pregunta o comentario, no dude en dejar un comentario.
terminal sedBuscar información en archivos de texto Archivos de índice Buscar palabras Lite
ÍNdice Buscar palabras Lite es como su propio Google ... para tantos archivos de texto están en su disco duro.
Buscar y reemplazar texto en varios archivos a granel en Windows
Buscar y reemplazar herramienta lo ayudará a buscar y reemplazar texto en múltiples archivos a granel. Simplemente ingrese el texto y presione Reemplazar para reemplazar texto al instante.
Buscar y reemplazar texto en varios archivos a la vez usando el software FAR
Si alguna vez necesita buscar y reemplazar texto en varios archivos en una vez en su PC con Windows, use el software FAR o Find and Replace. ¡Crea copias de seguridad automáticamente!