una todos texto recursivos recursivo recursivamente recursiva propietario permisos los dar carpeta cambiar busqueda buscar archivos sed find grep replace

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

  1. La respuesta de @ vehomzzz usa find y xargs cuando las preguntas dicen explícitamente grep y sed solamente.

  2. @EmployedRussian y @BrooksMoses intentaron decir que era un duplicado de awk y sed , pero no lo es, de nuevo, la pregunta explícitamente dice grep y sed 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.