Forums FUG-FR
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl
Divers et varié >> Programmation >> Supprimer les crtl ^M par lot
https://forums.fug-fr.org/cgi-bin/yabb2/YaBB.pl?num=1174722247

Message started by kermitt on 24. Mar 2007 at 08:44

Title: Supprimer les crtl ^M par lot
Post by kermitt on 24. Mar 2007 at 08:44
Un petit script pour virer les caractères indésirables...

#!/bin/bash
#
#*********************************************************************
# fichier : dosUnix.sh
# description : Conversion de fichiers DOS en fichier UNIX
# (suppression des ctrl M)
#*********************************************************************
if [ $# -gt 0 ]; then
        i=1
        for param in $*; do
##              ($i) :  $param
# Traitement
               cat $param | tr -d '\r' >$param.new
# Sauvegarde
               cp $param $param.bak
# Remplacement
               mv $param.new $param
               i=`expr $i + 1`
       done
else
   echo 'ATTENTION !!!  '
   echo 'usage: '$0 '<nom de fichier ...>'
   echo 'Vous avez donné: '$# 'paramètre'
fi

# fin du script

Title: Re: Supprimer les crtl ^M par lot
Post by Marck on 24. Mar 2007 at 12:53
Salut

En lisant ton script, je me disais que j'avais déjà "vu cela" quelque part dans les ports ; j'ai retrouvé.

cat /usr/ports/converters/unix2dos/pkg-descr
unix2dos and dos2unix are utilities that convert ASCII files from the DOS cr/lf format to the UNIX lf format

Bref il y a les deux commandes: dos2unix et unix2dos

Ceci dit rien n'empêche d'utiliser un script maison... c'est d'une certaine façon plus sympathique  :)

Title: Re: Supprimer les crtl ^M par lot
Post by jc1 on 24. Mar 2007 at 14:10
Bonjour,

Il existe aussi des exe sous dos qui font aussi cela.
Je pensais que le problème était seulement dans le sens unix => dos et pas dans le sens contraire.


Est-ce que ce script ne pourrait pas figurer sur le wiki pour que cela ne se perde pas ?

Title: Re: Supprimer les crtl ^M par lot
Post by ros on 24. Mar 2007 at 15:16
il existe 2 outils
  • unix2dos avec son dos2unix
  • et dosunix .

    L'un des deux permet de recuperer un flux l'autre réclame un fichier en sortie

  • Title: Re: Supprimer les crtl ^M par lot
    Post by kermitt on 24. Mar 2007 at 18:59

    jc1 wrote on 24. Mar 2007 at 14:10:
    Bonjour,
    Est-ce que ce script ne pourrait pas figurer sur le wiki pour que cela ne se perde pas ?


    No problème ; je te laisse le soin de le publier si tu en as envie.


    Quote:
    il existe 2 outils  
    # unix2dos avec son dos2unix
    # et dosunix .


    Mdr... je me suis cassé le C. pour rien !!

    Title: Re: Supprimer les crtl ^M par lot
    Post by jc1 on 24. Mar 2007 at 19:52
    Bonjour,

    @kermitt : ok, je vois tout le monde si cela convient.

    Est-ce que cela vaut la peine de mettre ce script sur le wiki ou il faut mieux utiliser les softs de ros ?

    Si l'on garde, je veux bien m'occuper de le mettre sur le wiki.

    Title: Re: Supprimer les crtl ^M par lot
    Post by Marck on 24. Mar 2007 at 20:44
    En fait le sujet est un classique et on trouve çà et là de multiples méthodes. Par exemple:
    http://www.lea-linux.org/cached/index/Trucs:Supprimer_les_%5EM_dans_les_fichiers_ASCII.html

    Donc je ne pense pas qu'il soit très utile d'ouvrir une page sur le sujet pour le wiki... mais si vous pensez le contraire... pourquoi pas :)

    Title: Re: Supprimer les crtl ^M par lot
    Post by patrick on 27. Mar 2007 at 13:27

    kermitt wrote on 24. Mar 2007 at 08:44:
    Un petit script pour virer les caractères indésirables...

    #!/bin/bash
    #


    Doit y avoir une erreur, j'ai pas de fichier /bin/bash sur mon FREEBSD...

    Title: Re: Supprimer les crtl ^M par lot
    Post by shes on 27. Mar 2007 at 14:29
    Bash n'est pas installé par défaut sur freebsd. Tu peux trouver bash dans /usr/ports/shells/bash
    Il est d'ailleurs aussi étonnant d'appeler bash depuis /bin (ce qui est d'ailleurs une très bonne chose)

    Par defaut, bash s'install dans /usr/local/bin
    [shes@mae ~]$ whereis bash
    bash: /usr/local/bin/bash /usr/local/man/man1/bash.1.gz /usr/ports/shells/bash

    Title: Re: Supprimer les crtl ^M par lot
    Post by Cyclope on 27. Mar 2007 at 16:37
    En parlant de shell, quelqu'un a un article ou une explication sur les différences fondamentales/historiques entre csh, sh, bash et autres shells ?


    @kermitt : merci pour le script ;)

    Title: Re: Supprimer les crtl ^M par lot
    Post by olivier.d on 27. Mar 2007 at 19:27
    Bonsoir,

    Pour éviter toutes ambiguités, on peut remplacer #! /bin/bash par #! /bin/sh. Car dans le script rien n'est vraiment spécifique au bash.
    Sinon si tu tiens au bash #! /usr/bin/env bash

    Title: Re: Supprimer les crtl ^M par lot
    Post by patrick on 27. Mar 2007 at 20:06

    olivierd wrote on 27. Mar 2007 at 19:27:
    Bonsoir,

    Pour éviter toutes ambiguités, on peut remplacer #! /bin/bash par #! /bin/sh. Car dans le script rien n'est vraiment spécifique au bash.
    Sinon si tu tiens au bash #! /usr/bin/env bash


    Voilà ! Le seul shell sur lequel on peut compter pour les scripts et /bin/sh, et je ne vois pas pourquoi on ferait des scripts à base de bash (sauf spécificité vraiment nécessaire, mais ce n'est pas le cas ici).

    Title: Re: Supprimer les crtl ^M par lot
    Post by kermitt on 29. Mar 2007 at 04:49

    Cyclope wrote on 27. Mar 2007 at 16:37:
    En parlant de shell, quelqu'un a un article ou une explication sur les différences fondamentales/historiques entre csh, sh, bash et autres shells ?



    Title: Re: Supprimer les crtl ^M par lot
    Post by francis on 29. Mar 2007 at 10:00
    Et on ne pouvait pas laisser de côté "Csh Programming Considered Harmful".

    Title: Re: Supprimer les crtl ^M par lot
    Post by Cyclope on 29. Mar 2007 at 10:04
    Merci pour ces liens !

    Title: Re: Supprimer les crtl ^M par lot
    Post by orgrim on 06. Mar 2008 at 15:29
    Salut,

    En fait, pour virer les "cariage return" ou "\r" ou encore ^M, la methode la plus efficace pour moi c'est ce petit onliner en Perl:

    $ perl -pi.bak -e 's/\r//' fichier1 [...fichierN]

    l'avantage, une ligne pour massivement corriger des fichiers et l'option -i <suffix> qui crée automatiquement un backup de chaque fichier avant traitement



    Title: Re: Supprimer les crtl ^M par lot
    Post by francis on 06. Mar 2008 at 15:43
    Ou encore:
    Code (]sed -i.back -e "s/\r//g"[/code):
    et même sans la copie de backup:[code]tr -d\r

    [edit]j'avais oublié: TIMTOWTDI ![/edit]

    Title: Re: Supprimer les crtl ^M par lot
    Post by orgrim on 08. Mar 2008 at 17:03
    Le tr parait bien tentant pour réduire la ligne de commande, mais il n'édite pas les fichiers en place. Par contre le sed marche nickel  8-)

    Forums FUG-FR » Powered by YaBB 2.5.2!
    YaBB Forum Software © 2000-2025. All Rights Reserved.