LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

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 suciedad sociedad 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 suciedad sociedad 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 comillasabrimos 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! 

No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Formulario de acceso

Filtro por Categorías