scripts - reemplace un texto en particular en todos los archivos usando el comando de shell de una sola línea
shell script comandos (6)
Está utilizando apóstrofes Unicode (RIGHT SINGLE QUOTATION MARK - U2019) en lugar de ASCII (0x27) apóstrofes alrededor de su argumento de comando sed
.
tengo un archivo js renombrado al que tengo que llamar en cada una de mis páginas php. Ahora quiero reemplazar ese viejo nombre con el nuevo usando shell. lo que iam usa es esto: -
sed -i ’s/old/new/g’ *
pero esto está dando el siguiente error:
sed: -e expression #1, char 1: unknown command:
ahora ¿cómo puedo hacer este reemplazo?
Probablemente haya soluciones menos detalladas, pero aquí vamos:
for i in *; do sed -i ''s/old/new/g'' "$i"; done
Eso sí, solo funcionará en el nivel actual del sistema de archivos, los archivos en subdirectorios no serán modificados. Además, es posible que desee reemplazar * con * .php, o hacer copias de seguridad (pasar un argumento después de -i, y hará una copia de seguridad con la extensión dada).
Prueba esto:
ls | grep "php" > files.txt
for file in $(cat files.txt); do
sed ''s/catch/send/g'' $file > TMPfile.php && mv TMPfile.php $file
done
este es muy simple, sin for o loop, y se ocupa de cualquier cantidad de directorios anidados
grep -rl ''oldText'' [folderName-optional] | xargs sed -i ''s/oldText/newText/g''
perl -pi -e ''s/old/new/g'' *.php
sed -i.bak ''s/old/new/g'' *.php
hacerlo recursivamente
find /path -type f -iname ''*.php'' -exec sed -i.bak ''s/old/new/'' "{}" +;