2009-10-18 14 views

Respuesta

44

Prueba esto: find /home/user/ -type f | xargs sed -i 's/a.example.com/b.example.com/g'

+0

esto reemplazará a la cadena en todos los archivos en el directorio/home/usuario? ¿Incluyendo subdirectorios? – Tony

+0

Sí, lo hará, aunque debe especificar algún tipo de patrón-nombre 'patrón' después de encontrar – vehomzzz

+0

¿qué quiere decir "algún tipo de patrón"? – Tony

4

Sé que esto es una pregunta muy viejo, pero ...

  1. @ respuesta de vehomzzz utiliza find y xargs cuando las preguntas dice explícitamente grep y sed solamente.

  2. @EmployedRussian y @BrooksMoses trataron de decir que era un DUP de awk y sed, pero no es - de nuevo, la pregunta dice explícitamente grep y sed única.

Así que aquí es mi solución, suponiendo que esté utilizando Bash como shell:

OLDIFS=$IFS 
IFS=$'\n' 
for f in `grep -rl a.example.com .` # Use -irl instead of -rl for case insensitive search 
do 
    sed -i 's/a\.example\.com/b.example.com/g' $f # Use /gi instead of /g for case insensitive search 
done 
IFS=$OLDIFS 

Si está utilizando un shell diferente, como Unix Shell, hágamelo saber y voy a tratar de encontrar un ajuste de sintaxis

P.S .: Aquí hay una sola línea:

OLDIFS=$IFS;IFS=$'\n';for f in `grep -rl a.example.com .`;do sed -i 's/a\.example\.com/b.example.com/g' $f;done;IFS=$OLDIFS 

Fuentes:

1

Prueba este comando:

/home/user/ directory - find ./ -type f \ 
-exec sed -i -e 's/a.example.com/b.example.com/g' {} \; 
+3

Hola. Por favor, no solo descargue el código como una respuesta. Explique lo que está haciendo para que los usuarios puedan entender cómo resolver el problema. Aclamaciones. – Cthulhu

9

Prueba esto:

grep -rl 'SearchString' ./ | xargs sed -i 's/REPLACESTRING/WITHTHIS/g' 

grep -rl buscará recursivamente para el SEARCHSTRING en los directorios ./ y reemplazará las cuerdas usando sed.

Ex:

Sustitución de un nombre TOM con JERRY utilizando cadena de búsqueda como SWATKATS en el directorio CARTOONNETWORK

grep -rl 'SWATKATS' CARTOONNETWORK/ | xargs sed -i 's/TOM/JERRY/g' 

Esto reemplazará TOM con JERRY en todos los archivos y subdirectorios bajo CARTOONNETWORK dondequiera que encuentra la cadena SWATKATS.

+0

Gracias por esta respuesta, ¿y cómo escribirla en otros archivos para no cometer errores? – Marine1

0

El siguiente comando buscará todos los archivos de forma recursiva, cuyo nombre coincide con el patrón de búsqueda y reemplazará la cadena:

find /path/to/searchdir/ -name "serachpatter" -type f | xargs sed -i 's/stringone/StrIngTwo/g'

Además, si desea limitar la profundidad de recursión puede poner los límites en cuanto así:

find /path/to/searchdir/ -name "serachpatter" -type f -maxdepth 4 -mindepth 2 | xargs sed -i 's/stringone/StrIngTwo/g'

+0

find/path/to/searchdir/-name "serachpatter" -type f -maxdepth 4 -mindepth 2 | xargs sed -i 's/stringone/StrIngTwo/g' – Akplive139

+0

En el futuro, edite su respuesta en lugar de publicar un comentario debajo. Además, por favor formatee el código apropiado; no use texto en negrita para el código. –

Cuestiones relacionadas