texto sustituir script renombrar reemplazar para especiales comando caracteres buscar archivos archivo unix command-line replace text-files batch-processing

unix - sustituir - sed ''s///g''



Lote reemplazar texto dentro de archivo de texto(Linux/OSX Commandline) (2)

Tengo cientos de archivos en los que necesito cambiar una parte de su texto.

Por ejemplo, quiero reemplazar cada instancia de "http: //" con "rtmp: //".

Los archivos tienen la extensión .txt y están distribuidos en varias carpetas y subcarpetas.

Básicamente, estoy buscando un camino / script que atraviese cada una de las carpetas / subcarpetas y cada archivo y si encuentra dentro de ese archivo la aparición de "http" para reemplazarlo por "rtmp".


Aquí hay una función zsh que uso para hacer esto:

change () { from=$1 shift to=$1 shift for file in $* do perl -i.bak -p -e "s{$from}{$to}g;" $file echo "Changing $from to $to in $file" done }

Hace uso del agradable mecanismo Perl para crear un archivo de respaldo y modificar el archivo nominado. Puede usar lo anterior para iterar a través de los archivos así:

zsh$ change http:// rtmp:// **/*.html

o simplemente póngalo en un guión trivial #!/bin/zsh (simplemente uso zsh para el poderoso globbing)


Puedes hacer esto con una combinación de find y sed :

find . -type f -name /*.txt -exec sed -i.bak ''s|http://|rtmp://|g'' {} +

Esto creará copias de seguridad de cada archivo. Le sugiero que revise algunos para asegurarse de que hizo lo que desea, luego puede eliminarlos usando

find . -name /*.bak -delete