Ejecuto este comando para buscar y reemplazar todas las apariciones de 'apple' con 'orange' en todos los archivos en la raíz de mi sitio:
find ./ -exec sed -i 's/apple/orange/g' {} \;
Pero no pasa por subdirectorios.
¿Qué hay de malo con este comando?
Aquí hay algunas líneas de salida de find ./
:
./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php
find ./
y publicar algunos resultados de muestra? Y la estructura del directorio por favor. editar: gracias!Respuestas:
Su hallazgo debería verse así para evitar enviar nombres de directorio a sed:
fuente
sed -i 's/apple/orange/g'
ased -i '' 's/apple/orange/g'
para que esto funcione.-i
toma un argumento: la extensión utilizada para guardar el archivo temporal. En GNU sed, parece que no hay espacio entre-i
y su argumento, pero en BSD sed sí existe ... entonces BSD-i '' 's/foo/bar/'
es equivalente a GNU-i 's/foo/bar/
.-e
no funciona en Mac OS.touch a b c d e
seguido por el comando anterior produce un listado del directorio de esta manera:a a-e b b-e c c-e d d-e e e-e
.RE error: illegal byte sequence
'{}'
, ya que fish expande automáticamente las llaves vacías si no se cita.Para tareas de s & r más grandes, es mejor y más rápido usar grep y xargs, por ejemplo;
fuente
git grep -l 'apples' | xargs sed -i 's/apples/oranges/g'
Esto funcionó para mí:
fuente
*.php
se cita es realmente incorrecto; Tuviste suerte de que no se expandiera en el directorio de inicio porque no tenías ningún archivo coincidente allí.fuente
Como también hay personas de macOS que leen este (como lo hice), el siguiente código funcionó para mí (el 10.14)
Todas las demás respuestas usan
-i
y-e
no funcionan en macOS.Fuente
fuente
Creo que podemos hacer esto con un comando simple de una línea
Consulte esta página .
fuente
En linuxOS:
si "sed" no funciona, intente:
fuente