sed - todos - permisos linux 777
¿Cómo encontrar y reemplazar todas las ocurrencias de una cadena recursivamente en un árbol de directorios? (7)
El siguiente comando buscará todos los archivos recursivamente cuyo nombre coincida 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 la recursión, puede poner los límites también:
find /path/to/searchdir/ -name "serachpatter" -type f -maxdepth 4 -mindepth 2 | xargs sed -i ''s/stringone/StrIngTwo/g''
Usando solo grep y sed, ¿cómo reemplazo todas las ocurrencias de:
a.example.com
con
b.example.com
dentro de un archivo de texto bajo el árbol de directorio /home/user/
recursivamente encontrando y reemplazando todas las ocurrencias en todos los archivos en subdirectorios también.
Para mí funciona el próximo comando:
find /path/to/dir -name "file.txt" | xargs sed -i ''s/string_to_replace/new_string/g''
si la cadena contiene una barra inclinada ''ruta / a / dir'', se puede reemplazar con otro carácter para separar, como ''@'' en lugar de ''/''.
Por ejemplo: ''s@string/to/replace@new/string@g''
Prueba esto:
grep -rl ''SearchString'' ./ | xargs sed -i ''s/REPLACESTRING/WITHTHIS/g''
grep -rl
buscará recursivamente SEARCHSTRING
en los directorios ./
y reemplazará las cadenas usando sed
.
Ex:
Reemplazar un nombre TOM
por JERRY
usando la cadena de búsqueda como SWATKATS
en el directorio CARTOONNETWORK
grep -rl ''SWATKATS'' CARTOONNETWORK/ | xargs sed -i ''s/TOM/JERRY/g''
Esto reemplazará a TOM
con JERRY
en todos los archivos y subdirectorios en CARTOONNETWORK
donde encuentre la cadena SWATKATS
.
Pruebe este comando:
/home/user/ directory - find ./ -type f /
-exec sed -i -e ''s/a.example.com/b.example.com/g'' {} /;
Pruebe esto: find /home/user/ -type f | xargs sed -i ''s/a.example.com/b.example.com/g''
find /home/user/ -type f | xargs sed -i ''s/a.example.com/b.example.com/g''
Sé que esta es una pregunta muy vieja, pero ...
La respuesta de @ vehomzzz usa
find
yxargs
cuando las preguntas dicen explícitamentegrep
ysed
solamente.@EmployedRussian y @BrooksMoses intentaron decir que era un duplicado de
awk
ysed
, pero no lo es, de nuevo, la pregunta explícitamente dicegrep
ysed
solamente .
Así que aquí está mi solución, suponiendo que estés usando Bash como tu caparazón:
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 e intentaré encontrar un ajuste de sintaxis.
PD: Aquí hay un trazador de líneas:
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:
es mucho más simple que eso.
for i in `find *` ; do sed -i -- ''s/search string/target string/g'' $i;
hecho
find i
=> introducirá todos los archivos en la carpeta y en las subcarpetas en SED.
sed -i
=> reemplazará en los archivos la cadena relevante si existe.