theme-sticky-logo-alt

Reemplazos con sed

2 Comments

Hoy por cuestiones de la vida aprendí a sustituir con el comando sed 
un caracter (o cadena de caracteres… como quieran) de un archivo solo
en su primera aparición. Como me pareció útil les dejo la receta de
cocina.

La necesidad y los problemas fueron los siguientes:

Necesidad: Asumamos que tenemos en un archivo, el log de visitantes que alguna vez en su vida revisaron google (pocos no?)… y sabemos que alguna vez Mr.Privativo reviso google.
Si quisieramos cambiar el nombre de este Señor (porque gracias al
fucking copyright no nos dejan decirlo) y queremos colocarle
MR-MICROSHIT…. OJO… pero solo la primera vez que vio la web… como
haríamos?

Problema: sed es un comando que se ejecuta en cada línea del archivo que tratamos, así que si no aplicáramos los siguientes filtros, sed
buscaría la coincidencia y la reemplazaría… pero en cada linea (o
salto de linea) del documento… dándonos como resultado que cambiaría
una vez el nombre del señor… en tooodas las lineas del documento. Eso
NO es lo que queremos; solo queremos la primera vez.

Filtros:

sed: el comando que ejecutará todo (considerado por muchos un lenguaje en si mismo)

i : esto sobreescribirá el archivo (si no lo aplicamos veremos la salida por pantalla pero no cambiaremos el archivo en si)

ne: Vamos a ejecutar algo parecido a un bucle, así que lo
separaremos, y gracias a esto sed ejecutara lo que este dentro de los
{} como una instrucción siguiente a la nueva.

H : ya que sed pasa el comando linea por linea, con esto
haremos creer que todo el documento es una línea, y ejecutará el
reemplazo una sola vez en todo el documento.

s/patrón/cambio : Indica “sustituye todo lo que se llame patrón por la palabra cambio”

p : Luego de que ejecute el cambio, digale a sed que todo
el documento no era una sola linea… eran varias, pero que mantenga el
único cambio que se hizo.

Así… finalmente nos queda estructurada la siguiente linea:

sed -i -ne ‘H;${g;s/patrón/cambio/;p}’ archivo

Ahora… como demonios funciona eso o que significa? algo así mas o menos:

“Con esto (sed) vamos a sobre-escribir (-i), usando un script que leeremos (-ne) que convertirá todo en una sola línea (H) y la leerá como si fuera todo el archivo (g) sustituyendo un patrón por un cambio (s/patrón/cambio/) y lo hará sin modificar el orden de las lineas que asumimos como una (;p); todo esto lo hará sobre el archivo (archivo)

Como vivimos en un mundo LIBRE y tenemos muchas otras cosas por hacer, aqui hay otras 4 instrucciones que podríamos usar para fines PARECIDOS pero no iguales:

sed ‘s/perro/gato/’ file

Cambia “perro”  por “gato” una vez en cada linea del archivo “file”

sed ‘s/perro/gato/g’ file

 Cambia “perro”  por “gato” todas las veces que exista entodas las lineas del archivo “file”

 sed ‘/cosa/,/fin/s/perro/gato/’ file

 Cambia “perro”  por “gato” desde el momento en que encuentre la palabra “cosa” y hasta que encuentre la palabra “fin” en el archivo “file”

sed ‘8,20s/perro/gato/’ file 

 Cambia “perro”  por “gato” desde la linea
“8” y hasta la linea “20” en el archivo “file

 

Salutex y ojala le sirva a alguien asi como me sirvio a mi :D 


Help tatica and donate with paypal!

Previous Post
Historia del Gimp Makeover con mencoder
Next Post
tatica inkscape

2 Comments

  • 30 November, -0001 at 0:00

    Me gustó como lo explicaste, es muy util.

    Reply
  • 30 November, -0001 at 0:00

    wepa.. no crei q sed le pudiera ser útil a una artista :D estoy comiendome unas ricas costillas de cerdo concatenadas con un arroz chino(del cochino)…¿puedo filtrar gastronómicamente la grasa con sed? :D

    Reply

Leave a Reply

15 49.0138 8.38624 1 0 4000 1 https://tatica.org/en 300 0