Buenas a tod@s:
Llevo toda la mañana investigando los comandos que tiene sed y las diversas formas de sustituir un string por otro. Sé que el potencial que tiene es muy grande, y debido a esto me pierdo. Y no encuentro lo que busco.
Lo que quiero es que el string "[38;5;226m" es decir todo lo que esté entre [ y m (ambos incluidos) se borre.
He probado varios comandos que parecen funcionar sin embargo cuando ejecuto el comando, en lugar de darme algun error, el cursor se vuelve ">" como si esperase alguna entrada de comando o algun argumento.
A ver si alguien me puede echar una mano.
Gracias.
De mientras continuaré buscando a ver si lo encuentro.
27-11-2016, 02:36 PM
(Última modificación: 27-11-2016, 02:39 PM por Shellmer.)
Has probado a hacerle al comando un ">> ficheronuevo.txt"?? Quizá te este intentando dar salida de datos al comando, y asi metes su resultado en un fichero nuevo. Quiero suponer que estas trabajando en linux...
A lo que me refiero es a algo así:
sed 's/[38;5;226m//g' fichero > fichero2
No se si funcionará, no lo he probado. El símbolo > envía la salida a un fichero borrando todo lo anterior y sustituyendo, el >> escribe a partir del final del fichero si ya existía. Si no conoces estos símbolos, busca también lo que son las pipes, se utilizan usando el símbolo |. Son muy utiles
Buenas a tod@s:
Sí, estoy trabajando con linux y estaba haciendo lo de que me diese el resultado en un fichero nuevo
He probado el comando que me has indicado y devuelve el siguiente error:
sed: -e expressión #1, caracter 15: orden «s» no terminada
A parte, me he explicado mal al principio, el string se inicia con [ y termina con m, sin embargo los numeros del medio y puntos y comas pueden variar, con lo cual me gustaría obtener una expresión regular que indicase que tiene que buscar y remplazar cualquier string que empieze por [ y termine por m indiferentemente del contenido intermedio.
Muchas gracias.
(27-11-2016, 05:12 PM)Electromecánico escribió: Buenas a tod@s:
Sí, estoy trabajando con linux y estaba haciendo lo de que me diese el resultado en un fichero nuevo
He probado el comando que me has indicado y devuelve el siguiente error:
sed: -e expressión #1, caracter 15: orden «s» no terminada
A parte, me he explicado mal al principio, el string se inicia con [ y termina con m, sin embargo los numeros del medio y puntos y comas pueden variar, con lo cual me gustaría obtener una expresión regular que indicase que tiene que buscar y remplazar cualquier string que empieze por [ y termine por m indiferentemente del contenido intermedio.
Muchas gracias.
Por desgracia en el tema de expresiones regulares estoy en pelotas, creo que se lo que quieres hacer, cargarte los códigos de color, y si, claro que necesitas una expresión regular, esa es una opción, la otra es que si ese formato de texto siempre es el mismo linea tras linea, podrías utilizar AWK y pillar solo los campos que tu quieras separando cada campo por espacios. Yo AWK lo utilizaba bastante para temas de filtros y scripts, lo solía utilizar bastante con la distro de BackTrack.
Buenas a tod@s:
Veo que no soy el único.
No te preocupes, si lo consigo hago un tuto y lo cuelgo para compartir el conocimiento y así todos aprendemos
Si no recuerdo mal con sed hay que escapar los caracteres con el simbolo antes de cualquier caracter raro con "\" .
Por ejemplo font\=\'Courier ...
Saludos
Enviado desde mi MotoG3 mediante Tapatalk
01-12-2016, 08:28 PM
(Última modificación: 01-12-2016, 08:31 PM por Electromecánico.)
Buenas a tod@s:
He probado con estos asistentes online de expresiones regulares y he encontrado lo que buscaba (en teoría)
"/\[.+m/g"
Sin embargo, a pesar de que se ejecuta y no me devuelve ningún error. Los carácteres que quiero eliminar siguen estando allí. Con lo cual.. o estoy poniendo mal la expresión regular o algo.
Estoy ponineod sed '/\[.+m/g' fichero1.txt > fichero2.txt
También he probado con el sed -e 'expresion_regular' fichero 1 > fichero 2
Y nada
Prueba con:
sed 's/\[.*m//g' fichero1 > fichero2
Así te creará el resultado en fichero2
Si lo que quieres es que fichero1 quede modificado puedes hacer:
sed -i 's/\[.*m//g' fichero1
Un saludo.
Buenas a tod@s:
Al final encontré la solución
Muchas gracias por todo.
¿Y cual era??? Así aprendemos todos...
(25-01-2017, 01:58 PM)monje escribió: ¿Y cual era??? Así aprendemos todos...
Buenas a tod@s:
Aunque no es la mejor forma así lo hice:
Código: delete_list = ['[38;5;250m','[38;5;047m','[38;5;049m','[38;5;220m','[38;5;202m','[38;5;111m',
'[38;5;045m','[38;5;255m','[38;5;033m',
'[38;5;214m','[38;5;208m','[38;5;226m','[0m','[38;5;082m','[38;5;046m', '[38;5;214m','[38;5;027m',
'[38;5;048m','[38;5;240;1m','[38;5;050m','[38;5;21;1m','[38;5;051m','[38;5;251m','[38;5;021m',
'[1m','[38;5;190m','[38;5;118m','[38;5;082m','[38;5;154m','[38;5;196m','[38;5;111m','']
fin = open(infile)
fout = open(outfile, "w+")
for line in fin:
for word in delete_list:
line = line.replace(word, "")
fout.write(line)
fin.close()
fout.close()
|