Quiero replace la barra invertida en la cadena page_path\example_filename.txt
con una barra diagonal. También quiero poder ejecutar esto en un gran sistema de files y hacer que busque de forma recursiva todos los directorys.
Encontré a alguien en la web que me dijo que usara grep
, xargs
y sed
pero no pude hacerlo funcionar. He estado probando diferentes variaciones en delimitadores y personajes de escape, pero no lo entendí.
Aquí está el command que estaba tratando de ejecutar:
grep -lr -e 'page_path\\' * | xargs sed -i 's/page_path\/page_path//g'
Gracias por adelantado.
También puedes usar find para eso:
find /your/path -type f -exec grep -l 'page_path\\' {} \; -exec sed -i 's#page_path\\#page_path/#g' {} \;
El segundo ejecutivo se ejecutará solo si el primero fue exitoso, y no tendrá problemas con los caracteres no imprimibles o que necesiten escaping en los nombres de los files.
Con grep | xargs
grep | xargs
, obtienes problemas con espacios en blanco en nombres de files. Puede evitar este problema usando: grep -lZr ... | xargs -0 sed ...
grep -lZr ... | xargs -0 sed ...
que utiliza cero bytes como delimitador.
Y ahora con respecto al command sed: El truco es que puedes usar en lugar de s/a/b/
cualquier otro personaje, por ejemplo, s#a#b#
:
sed -i 's#page_path\\#page_path/#g'