LinuxParty
En determinadas ocasiones deseamos reemplazar texto dentro de un archivo, por ejemplo, cambiar en Documento.txt todo lo que diga “mi familia” por “nosotros”. Para lograr esto podemos usar nuestro editor de texto preferido (Kate, Gedit, SublimeText, etc) pero siempre es bueno conocer variantes, otras formas de lograr el mismo resultado
Sucede que con expresiones regulares se puede lograr esto, el comando sed es simplemente magnífico, tiene un sinfín de variantes y opciones pero… para aquellos que solo desean reemplazar texto de la forma menos compleja posible, para ellos es que traigo esta variante mucho más simple:
Siguiendo el ejemplo, tenemos el archivo Documento.txt ubicado en $HOME/Documento.txt con el siguiente texto:
(…) mi familia es como todas, como la tuya o la de tu vecino. De hecho mi familia intentamos ser personas responsables y a los ojos de la sociedad, políticamente y socialmente correctos. No obstante, en mi casa hay una oveja negra, y ese es mi papel LOL!. Yo siempre he sido el que no teme a decir lo que piensa (aunque no sea aparentemente correcto a ojos de la sociedad), aunque en realidad mi familia está harta de la
suciedadsociedad de hoy en día.
Con el siguiente comando cambiará “mi familia” por “nosotros“:
perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt
Así de simple
Entonces el texto sería:
(…) nosotros es como todas, como la tuya o la de tu vecino. De hecho nosotros intentamos ser personas responsables y a los ojos de la sociedad, políticamente y socialmente correctos. No obstante, en mi casa hay una oveja negra, y ese es mi papel LOL!. Yo siempre he sido el que no teme a decir lo que piensa (aunque no sea aparentemente correcto a ojos de la sociedad), aunque en realidad mi familia está harta de la
suciedadsociedad de hoy en día.
La sintaxis es:
perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar
Puede parecer un poco complejo el comando, vamos a desglosarlo un poco y explicarlo de forma un poco más simple
- perl : Lo que usaremos, perl
- -pi : Pí, como π (el de valor aproximado de 3.14)
- -e : La E imagínenla de “e de ejecutar” ^-^
- Luego entre comillas ” abrimos con una s y cerramos con una g : “sg” … imaginen la S de Start (iniciar) y la G de Game Over
- A su vez entre la sg debemos poner dos juegos de corchetes: [ ] y [ ], quedando así: “s[ ][ ]g”
- Dentro de los primeros corchetes como dije más arriba, irá el texto que deseamos quitar y reemplazar por uno nuevo, mientras que en el segundo juego de corchetes irá el nuevo texto a poner, siguiendo el ejemplo: “s[mi familia][nosotros]g”
¿Simple no?
La explicación es en realidad mucho más extensa que lo necesario para el comando, es bastante sencillo de entender
Perl es mucho, muchísimo más que una forma para reemplazar texto, es todo un lenguaje
Si desean aprender más de él instalen el paquete perl-doc y échenle un ojo a toooodo lo que permite, simplemente es un universo diferente.
Por cierto y para cerrar, suponiendo que deseen buscar todos los archivos .txt que tengan en $HOME/Documentos/ y en cada uno reemplazar “mi familia” por “nosotros”, se puede unir find + perl para lograr esto:
find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;
O bien usando un comodín:
perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt
El problema con esta segunda variante, es que no reemplazará en archivos que se encuentren en subcarpetas
En fin, espero que lo hayan encontrado interesante. Para mí ha sido realmente útil, ya puedo reemplazar texto directamente desde la terminal … genial!
-
Programación
- Thomas E. Kurtz, coinventor de BASIC, muere a los 96 años
- Profesor de informática del MIT prueba el impacto de la IA en la formación de programadores
- Lanzamiento del IDE de código abierto Qt Creator 14 con soporte para complementos basados en Lua
- Plantillas para Joomla - Episodio 1: Plantillas, marcos y clubes o no...
- Este es el mejor libro que he visto para aprender a programar en Python en castellano desde cero, gratis y online
- ¿Deberían los niños seguir aprendiendo a programar en la era de la IA?
- La 'obsolescencia' de VBScript confirmada por Microsoft y su eventual eliminación de Windows
- El Gran Debate: ¿Deberían los Modelos de Inteligencia Artificial Ser de Código Abierto?
- El lenguaje de programación BASIC cumple 60 años
- El CEO de Nvidia dice que los niños no deberían aprender a programar
- 40 años de Turbo Pascal: recuerdos del dinosaurio codificador que revolucionó los IDE
- Los lenguajes de programación más populares y dónde aprenderlos.
- Top 5 de los principales lenguajes de programación para desarrollar aplicaciones de escritorio Linux
- Qt Creator 12 lanzado con complementos de grabación de pantalla y Explorador de compiladores
- 10 sitios web para practicar problemas de programación