[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Sustituir texto en un fichero con SED.



On Wednesday, January 2, 2019 10:24:03 PM -03 Ramses wrote:
> El 2 de enero de 2019 20:14:50 CET, Ramses <ramses.sevilla@gmail.com> 
escribió:
> >El 2 de enero de 2019 20:03:31 CET, Matias Mucciolo
> >
> ><mmucciolo@suteba.org.ar> escribió:
> >>On Wednesday, January 2, 2019 7:53:42 PM -03 Ramses wrote:
> >>> El 2 de enero de 2019 19:44:38 CET, Matias Mucciolo
> >>
> >><mmucciolo@suteba.org.ar> escribió:
> >>> >> On Wednesday, January 2, 2019 6:39:15 PM -03 Ramses wrote:
> >>> >> > Hola a tod@s y feliz año...
> >>> >> > 
> >>> >> > Tengo un fichero de texto con líneas, entre otras tantas, que
> >>> >
> >>> >comienzan
> >>> >
> >>> >> > con:
> >>> >> > 
> >>> >> > # P1 =
> >>> >> > # P12 =
> >>> >> > # P123 =
> >>> >> > # P1234 =
> >>> >> > 
> >>> >> > Donde cada dígito es variable entre 0 y 9, es decir, lo mismo
> >
> >te
> >
> >>> >> > encuentras
> >>> >> > un '# P8' que un '# P5487', pero también te encuentras con
> >>
> >>líneas
> >>
> >>> >que
> >>> >
> >>> >> > empiezan por '# P pepito'.
> >>> >> > 
> >>> >> > Me gustaría saber si hay forma de cambiar con SED todas las
> >>
> >>líneas
> >>
> >>> >que
> >>> >
> >>> >> > comienzan por:
> >>> >> > 
> >>> >> > # P1 =
> >>> >> > # P12 =
> >>> >> > # P123 =
> >>> >> > # P1234 =
> >>> >> > 
> >>> >> > Y dejarlas comenzando así:
> >>> >> > 
> >>> >> > P1 =
> >>> >> > P12 =
> >>> >> > P123 =
> >>> >> > P1234 =
> >>> >> > 
> >>> >> > Claro, manteniendo el resto de líneas del fichero tal cual
> >>
> >>están,
> >>
> >>> >por
> >>> >
> >>> >> > ejemplo, las que comienzan por  y el resto.
> >>> >> > 
> >>> >> > 
> >>> >> > Saludos y gracias,
> >>> >> > 
> >>> >> > Ramsés
> >>> >> 
> >>> >> Buenas Ramses
> >>> >> 
> >>> >> si esta todo bien como dijiste y tenes exactamente esas lineas
> >>> >> con el siguiente sed podes "descomentar" las lineas
> >>> >> que empiezas con "# PN" siendo N un numero del 0-9
> >>> >> 
> >>> >> sed:
> >>> >> 
> >>> >> sed '/P[0-9]/s/# //g'
> >>> >> 
> >>> >> ejemplo la linea '# P pepito' no se modifica...
> >>> >> probalo y cualquier duda pregunta.
> >>> >> o pone las lineas exactamente como son y cual falla..
> >>> >> 
> >>> >> saludos.
> >>> >> Matias.-
> >>> >
> >>> >acomodo el sed se me paso la parte de "empieza por bla"
> >>> >
> >>> >sed '/^# P[0-9]/s/# //g'
> >>> >
> >>> >ahora si ...
> >>> >saludos
> >>> >Matias.
> >>> 
> >>> Ha, bien, te estaba contestando a tu correo para comentarte que si
> >
> >no
> >
> >>> faltaba el ^.
> >>> 
> >>> Ahora, está línea (sed '/^# P[0-9]/s/# //g') sustituiría las líneas
> >>
> >>que
> >>
> >>> comienzan, por ejemplo, por '# P8', pero como he comentado, ¿y para
> >>
> >>las
> >>
> >>> líneas que comienzan por '# P65', '# P756' o '# P 6548'?
> >>> 
> >>> Es decir, las líneas pueden comenzar desde '# PN =' hasta '# PNNNN
> >>
> >>='.
> >>
> >>> Saludos y gracias,
> >>> 
> >>> Ramsés
> >>
> >>Mientras no tengan espacio, es decir, '# P N' (que veo en tu pregunta
> >>'# P 6548' ) serviria desde '# PN'  hasta  '# PNNNNNNNNNN(...)'
> >>infinito.
> >>
> >>ahora si hay espacio...lo mas facil es correr este comando
> >>y una segunda pasada con este otro:
> >>
> >>sed '/^# P [0-9]/s/# //g'
> >>
> >>y con esas dos pasadas se solucionaria.
> >>
> >>ejemplo:
> >>
> >>$ cat aa
> >># P1 =
> >># P12 =
> >># P123 =
> >># P1234 =
> >># P31234 =
> >># P pepito =
> >># P 6548 =
> >>$
> >>$ cat aa | sed '/^# P[0-9]/s/# //g' | sed '/^# P [0-9]/s/# //g'
> >>P1 =
> >>P12 =
> >>P123 =
> >>P1234 =
> >>P31234 =
> >># P pepito =
> >>P 6548 =
> >>
> >>
> >>
> >>Saludos.
> >>Matias
> >
> >No, no, Matías, los números están pegados a la P, no hay espacios.
> >
> >
> >Saludos,
> >
> >Ramsés
> 
> Bien, Matías, muchas gracias, creo que este tema solucionado...
> 
> Con comando:
> 
> sed '/^# P[0-9]/s/# //g' fichero-A.txt > fichero-A-LIMPIO.txt
> 
> Genero el mismo "fichero-A.txt" con todas las líneas que comenzaban con "#
> PNNNN" cambiadas por "PNNNN".
> 
> Ahora tengo que hacer otra cosa que no sé si se podrá hacer con SED o habrá
> que usar otro comando.
> 
> Por ejemplo, tengo el "fichero-A-LIMPIO.txt" que contiene:
> 
> fichero-A-LIMPIO.txt
> --------------------------------
> P2315 = 7
> P6 = manolo
> P35 = www.jose.com
> 
> Y tengo un "fichero-B.txt" que contiene:
> 
> fichero-B.txt
> --------------------------------
> P2315=38
> P6=paco
> P35=1.2.3.4
> 
> Ahora tendría que buscar, por ejemplo, cada una de las líneas PNNNN del
> "fichero-A-LIMPIO.txt", buscarlas en el "fichero-B.txt' y sustituir la
> línea del "fichero-A-LIMPIO.txt" por la que aparece en el "fichero-B.txt".
> 
> Por ejemplo, buscar la línea 'P2315 = 7' del "fichero-A-LIMPIO.txt" en el
> "fichero-B.txt" y sustituirla en el "fichero-A-LIMPIO.txt" por la línea
> 'P2315=38' que aparece en el "fichero-B.txt".
> 
> No sé si me explico...
> 
> Claro, con:
> 
> sed 's/^P2315 =.*/P2315=38/' fichero-A-LIMPIO.txt
> 
> Pero claro, tendría que buscar la línea PNNNN en el "fichero-A-LIMPIO.txt",
> buscar la misma en el "fichero-B.txt" y reemplazar la línea en el
> "fichero-A-LIMPIO.txt' por la que aparece en el "fichero-B.txt".
> 
> ¿O sería más fácil abrirlos en una hoja de cálculo y aplicarles unas
> funciones?.
> 
> 
> Saludos y gracias,
> 
> Ramsés

Buenas
ahi ya vas a tener que hacer un script que busque el numero
en el archivo "B" y si lo encuentra que haga el sed para reemplazarlo
en el archivo "A" ...podes usar la opción 'i' de sed para que los cambios
sean en el mismo archivo sin tener que redirigir a otro file..

no es complicado con un apr de greps cut etc odes hacerlo bastante facil.
Si te trabas en algo avisanos.

Matias.-




Reply to: