Reemplazos con sed
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!