lunes, 31 de diciembre de 2018

Reemplazar texto dentro de ficheros

En algunas ocasiones se hace necesario cambiar algún texto dentro de un fichero. En una primera aproximación, se puede usar un fichero temporal para ello:
$ cat fichero | sed "s/Buenos días/Buenas tardes/g" > tmp
$ mv tmp fichero
No obstante, hay una forma más directa y recomendable de realizar este tipo de cambios:
$ sed -i "s/Buenos días/Buenas tardes/g" fichero
Con la opción -i se indica a sed que realice el cambio dentro del fichero. Por tanto, no harán falta temporales ni más instrucciones que una.
De forma opcional, el parámetro -i acepta que se indique un sufijo con el cual mantener el fichero original, sin cambios.
De esta forma, si ejecutamos:
$ sed -i.bck "s/Buenos días/Buenas tardes/g" fichero
tendremos dos ficheros:
$ cat fichero
Buenas tardes que tal
$ cat fichero.bck
Buenos días que tal