En el shell de Linux, el siguiente comando buscará y reemplazará recursivamente todas las instancias de 'this' con 'that' (no tengo un shell de Linux frente a mí, pero debería hacerlo).
find . -name "*.txt" -print | xargs sed -i 's/this/that/g'
¿Cómo será un comando similar en OSX?

apple.stackexchange.comya que no es lo suficientemente genérico para Linux ni para todos los desarrolladores.Respuestas:
OS X utiliza una combinación de herramientas BSD y GNU, por lo que es mejor consultar siempre la documentación (aunque tenía una que
lessni siquiera se ajustaba a la página de manual de OS X):https://web.archive.org/web/20170808213955/https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html
sed toma el argumento después
-icomo la extensión para las copias de seguridad. Proporcione una cadena vacía (-i '') para que no haya copias de seguridad.Lo siguiente debería hacer:
LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/ {} +El
-type fes solo una buena práctica; sed se quejará si le das un directorio más o menos.-execse prefiere sobrexargs; no necesitas molestarte-print0ni nada. Al{} +final significa quefindagregará todos los resultados como argumentos a una instancia del comando llamado, en lugar de volver a ejecutarlo para cada resultado. (Una excepción es cuando se infringe el número máximo de argumentos de línea de comandos permitidos por el sistema operativo; en ese casofindse ejecutará más de una instancia).fuente
%carácter:sed "s%localhost/site%blah/blah%". Otra alternativa es la barra invertida-escapar del separador:sed "s/localhost\/site/blah\/blah/".illegal byte sequenceerror? si es así, intente:LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/ {} +funcionó para mí./gpara múltiples ocurrencias comoLC_ALL=C find . -type f -exec sed -i '' s/search/replace/g {} +Para el mac, un enfoque más similar sería este:
fuente
find . -name '*.php' -print0 | xargs -0 sed -i "" "s/easyform/form360/g"Como solución alternativa, estoy usando esta en Mac OSX 10.7.5
El crédito es para: la respuesta de Todd Cesere
fuente
En Mac OSX 10.11.5 esto funciona bien:
fuente
Ninguno de los anteriores funciona en OSX.
Haz lo siguiente:
fuente
Una versión que funciona tanto en Linux como en Mac OS X (agregando el
-einterruptor ased):fuente
export LC_CTYPE=C && export LANG=CCada vez que escribo este comando, parece que siempre lo manguito u olvido una bandera. Creé un Gist en github basado en la respuesta de TaylanUB que hace un reemplazo global del directorio actual. Esto es específico de Mac OSX.
https://gist.github.com/nateflink/9056302
Es bueno porque ahora solo abro una terminal y luego copio:
curl -s https://gist.github.com/nateflink/9056302/raw/findreplaceosx.sh | bash -s "find-a-url.com" "replace-a-url.com"
Puede obtener algunos errores de secuencia de bytes extraños, así que aquí está el código completo:
fuente
Este es mi viable. en mac OS X 10.10.4
Los anteriores usan find para cambiar los archivos que no contienen el texto de búsqueda (agregue una nueva línea al final del archivo), que es detallado.
fuente
Si está utilizando un terminal zsh, puede usar comodines mágicos:
sed -i "" "s/search/high-replace/g" *.txtfuente
Utilicé este formato, pero ... descubrí que tenía que ejecutarlo tres o más veces para que cambiara cada instancia, lo que me pareció extremadamente extraño. Ejecutarlo una vez cambiaría algunos en cada archivo pero no todos. Ejecutar exactamente la misma cadena dos o cuatro veces capturaría todas las instancias.
fuente
ga al final, de lo contrario solo reemplaza la primera aparición dethistexten una línea. Entonces tu expresión regular debería sers/thistext/newtext/ghttps://bitbucket.org/masonicboom/serp es una utilidad go (es decir, multiplataforma), probada en OSX, que realiza búsquedas y reemplazos recursivos de texto en archivos dentro de un directorio dado, y confirma cada reemplazo. Es nuevo, por lo que podría tener errores.
El uso se ve así:
fuente
Consulte aquí para más información.
fuente
El comando en OSX debe ser exactamente el mismo que en Unix bajo la bonita interfaz de usuario.
fuente
-print0agregar a lasfindbanderas y-0a lasxargsbanderas.-exec sed -i s/this/that/g {} \+lugar de-printy xargsxargspodría ver el delimitado por espacios "./jacobus" como un archivo para pasarsed, y luego con "R.txt" , ninguno de los cuales existe.podría decir $ PWD en lugar de "."
fuente