Buscar y reemplazar cadena de caracteres

Iniciado por Vexiaxz, 18 Noviembre 2021, 08:52 AM

0 Miembros y 1 Visitante están viendo este tema.

Vexiaxz

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.

Danielㅤ

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
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Vexiaxz

Claro, pero como lo puedo hacer en batch?
Lo he intentado y lo he logrado.

EdePC

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 (dos) [Seleccionar]

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


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.