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

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



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


Reply to: