Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Vexiaxz en 18 Noviembre 2021, 08:52 am



Título: Buscar y reemplazar cadena de caracteres
Publicado por: Vexiaxz en 18 Noviembre 2021, 08:52 am
Buenas tardes,

Tengo un texto y deseo buscar una línea en particular y cambiar una palabra (de false a true o viceversa).

El problema es que tengo caracteres especiales y todo lo que he probado me falla.
El archivo tiene unas 1500 líneas similares con valores false o true, pero ninguna es idéntica.

La línea que deseo reemplazar es la siguiente:

<item oor:path="/org.openoffice.Office.Common/VCL"><prop oor:name="ForceSkiaRaster" oor:op="fuse"><value>false</value></prop></item>

Esta palabra es única en todo el texto ForceSkiaRaster, se podría encontrar la línea con esta palabra y cambiar el false por true o viceversa solo en esa línea.

He probado ya muchos métodos pero nada me ha funcionado casi siempre me falla por los caracteres espaciales.

Incluso he probando utilizando el sed y grep, pero nada... no me funciona.


Título: Re: Buscar y reemplazar cadena de caracteres
Publicado por: Danielㅤ en 18 Noviembre 2021, 14:28 pm
Hola, esos no son caracteres especiales, esos son símbolos comunes.
Con respecto a lo que deseas hacer, no es difícil lograrlo, si ninguna línea del archivo es idéntica, además de que nos comentas que la palabra "ForceSkiaRaster" es única en todo el archivo, entonces podrías buscar a reemplazar este pedazo de texto:

<prop oor:name="ForceSkiaRaster" oor:op="fuse"><value>false</value></prop></item>

por éste:

<prop oor:name="ForceSkiaRaster" oor:op="fuse"><value>true</value></prop></item>

eso debería de funcionar.


Saludos


Título: Re: Buscar y reemplazar cadena de caracteres
Publicado por: Vexiaxz en 18 Noviembre 2021, 15:15 pm
Claro, pero como lo puedo hacer en batch?
Lo he intentado y lo he logrado.


Título: Re: Buscar y reemplazar cadena de caracteres
Publicado por: EdePC en 19 Noviembre 2021, 15:50 pm
Batch por si mismo solo manipula texto simple que está pensado ser nombres de archivos o carpetas, por eso caracteres como <> lo fastidian.

Tienes que apoyarte llamando a otros comandos más versátiles para esas cosas como PowerShell o Visual Basic Script, con PowerShell sería bastante sencillo gracias a sus expresiones regulares:

Código
  1. @Echo Off
  2. ChCp 1252
  3. PowerShell (Get-Content texto_false.txt) -Replace '(ForceSkiaRaster.*)false','$1true' > texto_true.txt

Seguramente en Bash también se puede hacer, pero de momento no lo tengo a mano para probar XD

Por otro lado estarían los problemas de codificación de caracteres, pero por defecto CMD se maneja en 850 así que no debería haber problemas con caracteres ingleses, pero si tu texto tiene caracteres latinos como eñes, tildes, diéresis, etc se debe poner al CMD con la codificación con la que se guardó el archivo o compatible, en mi ejemplo puse ChCp 1252 porque mi archivo texto_true.txt se guardó con codificación ANSI que es lo mismo que Windows-1252 así que se lo pongo en el CMD para que ambos hablen el mismo idioma.