Forum Programmation.shell Retirer les ^[[00m avec vim

Posté par .
Tags : aucun
1
2
juin
2009
Voilà j'ai le problème suivant (Sous Suse)
ls ../path/toto_* > File_list
me donne bien la liste des fichiers que je veux mais
les lignes sont encadrée par des ^[[00m
par exemple
[code]
^[[00m../TestNoise/Noise_1350_1399.root^[[00m
[/code]

Quelle méthode me permet de retirer ces caractères bizarre efficacement (et pas a la main? )
De préférence avec vim
Mais je peux aussi me contenter d'autre outils si besoin est ;)


Merci pour votre aide
  • # Caractères de contrôle

    Posté par (page perso) . Évalué à 4.

    Ces caractères de contrôle peuvent être enlevés dés la création de la liste non ?

    en enlevant les couleur déjà :
    ls --color=none

    et enlever toutes les options de mise en forme utilisées par défaut par le ls de Suse

    C'est une idée comme ça ...

    Bonne journée.
    • [^] # Re: Caractères de contrôle

      Posté par . Évalué à 2.

      Merci j'ai aussi compris le pourquoi du comment du problème,
      Sur le réseaux on a des machines ubuntu et suse,
      pour avoir la couleur dans ls sous ubuntu il faut préciser ls --color qui est alors aliasé dans mon .tcshrc par contre sous suse ça rajoute partout les caractères spéciaux même lorsqu'on écrit sur un fichier...
  • # man ls

    Posté par . Évalué à 3.

    Ce sont des codes pour l'affichage en couleurs. Tu peux les désactiver avec

    ls --color=none ../path/toto_* > File_list

    Le mieux est d'utiliser par défaut color=auto, qui affiche les couleurs sur une sortie terminal mais les désactive sur une sortie redirigée en fichier.
  • # Caractère de ^cochon

    Posté par . Évalué à 4.

    Si on te file un fichier avec ce genre de caractère, tu peux les supprimer sous vi/vim de cette manière:


    :,$s/^V^[\[00m//g


    Légende:
    ^V : control V
    ^[ : control [
  • # Flagrant délit d' [[UUoL]] !!

    Posté par (page perso) . Évalué à 1.

    Je te conseillerais plutôt d'utiliser "echo" ou "find" plutôt que "ls" :
    [code]echo ../path/toto_* > File_list[/code]

    ou mieux encore, si jamais tu avais des fichiers avec des espaces dans leur nom :

    [code]:>File_list ; for file in ../path/toto_* ; do echo $file >> File_list ; done[/code]
    [code]find ../path/toto_* > File_list[/code]

    En effet, 'ls' est un outil dédié purement au formatage humainement lisible d'une liste de fichiers et/ou dossiers.
    Il n'a rien à faire dans une commande shell (et si on veut faire des opérations sur certaines informations des fichiers/dossiers, il faut utiliser 'stat')

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.