This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Comando con sed
#1
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.
  Responder
#2
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
  Responder
#3
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.
  Responder
#4
(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.
  Responder
#5
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 Sonrisa
  Responder
#6
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
  Responder
#7
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
  Responder
#8
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.
  Responder
#9
Buenas a tod@s:

Al final encontré la solución Sonrisa

Muchas gracias por todo.
  Responder
#10
¿Y cual era??? Así aprendemos todos... Sonrisa
  Responder
#11
(25-01-2017, 01:58 PM)monje escribió: ¿Y cual era??? Así aprendemos todos... Sonrisa

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()
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Problema con comando sudo apt-get upgrade Electromecánico 4 3,336 15-03-2016, 08:40 PM
Último mensaje: Electromecánico