Calificación:
  • 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.
Citar
#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
Citar
#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.
Citar
#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.
Citar
#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
Citar
#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
Citar
#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
Citar
#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.
Citar
#9
Buenas a tod@s:

Al final encontré la solución Sonrisa

Muchas gracias por todo.
Citar
#10
¿Y cual era??? Así aprendemos todos... Sonrisa
Citar
#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()
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Problema con comando sudo apt-get upgrade Electromecánico 4 1,629 15-03-2016, 08:40 PM
Último mensaje: Electromecánico