Saltar al contenido

Usando grep y sed para encontrar y reemplazar un string

Te sugerimos que revises esta respuesta en un entorno controlado antes de enviarlo a producción, saludos.

Solución:

Puedes usar find y -exec directamente en sed en lugar de ubicar primero oldstr con grep. Es quizás un poco menos eficiente, pero eso podría no ser importante. De esta manera, el sed el reemplazo se ejecuta sobre todos los archivos enumerados por findpero si oldstr no está allí, obviamente no funcionará en él.

find /path -type f -exec sed -i 's/oldstr/newstr/g'  ;

Tu solución está bien. solo inténtalo de esta manera:

files=$(grep -rl oldstr path) && echo $files | xargs sed....

así que ejecuta el xargs solo cuando grep regresa 0por ejemplo, cuando se encuentra el string en algunos archivos.

Tomé la idea de Vlad y la cambié un poco. En lugar de

grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' /dev/null

Cuyos rendimientos

sed: couldn't edit /dev/null: not a regular file

Estoy haciendo en 3 conexiones diferentes al servidor remoto

touch deleteme
grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g' ./deleteme
rm deleteme

Aunque esto es menos elegante y requiere 2 conexiones más al servidor (tal vez haya una manera de hacerlo todo en una sola línea), también hace el trabajo de manera eficiente.

Te mostramos comentarios y valoraciones

Si posees algún preocupación o forma de regenerar nuestro crónica puedes añadir un exégesis y con mucho gusto lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *