[ksh] vi, sed et caractères "null" et &

Pitu Messages postés 1460 Statut Contributeur -  
jisisv Messages postés 3678 Statut Modérateur -
Bonjour à toutes et à tous

Des fichiers de données arrivent sur ma machine unix avec des caractères parasites en fin de ligne : ^M (hexa [0D] [0A])
C'est dû au paramétrage des transferts ftp successifs que mes fichiers ont subi pour arriver jusqu'à destination, qui ont fait que le CR-LF est mal transcodé.
Pour remédier à cela, j'ai passé une brillante commande sed qui a pour but de me virer ces caractères supplémentaires :
sed 's/^M$//g' fic1.in > fic1.out

Problème : Dans mes fichiers de départ, j'ai parfois plusieurs caractères hexa [00]. Ils ne sont pas visibles par vi, et le passage de la commande sed me les supprime carrément.
Ma question : comment virer les caractères ^M de fin de ligne sans pour autant supprimer ces caractères "null" ?

D'avance merci.
  (:•Þ   Pitu
Sauvez mon hamac, Bouffez Castor !

13 réponses

  1. Pitu Messages postés 1460 Statut Contributeur 125
     
    Ben ... sur un AIX, si.
    Pour preuve :
    Edition du fichier par Ultra-Edit via Samba :
    AAAAAAAAAA
    BBBBBB..BB
    CCCCCCCCCC
    DDDDDDDDDD
    EEEEE.EEEE

    En hexa :
    41 41 41 41 41 41 41 41 41 41 0D 0A 42 42 42 42
    42 42 00 00 42 42 0D 0A 43 43 43 43 43 43 43 43
    43 43 0D 0A 44 44 44 44 44 44 44 44 44 44 0D 0A
    45 45 45 45 45 00 45 45 45 45 0D 0A

    Maintenant, sous vi :
    AAAAAAAAAA^M
    BBBBBBBB^M
    CCCCCCCCCC^M
    DDDDDDDDDD^M
    EEEEEEEEE^M
    Avec en bas de la page, le msg suivant :
    "test00.x" [Incomplete last line] 5 lines, 58 characters (3 nulls)
    Tu vois le pb ?
    Il me manque 2 car sur la ligne des "B", et un sur celle des "E".
    Et si je passe la commande pour enlever les ^M, voila ce que j'obtiens :
    AAAAAAAAAA
    BBBBBBBB
    CCCCCCCCCC
    DDDDDDDDDD
    EEEEEEEEE

    Et en bas :
    "test00.x" 5 lines, 52 characters

    => Il me manque bien des caractères.
    Et si je reprends mon fichier sous Ultra-Edit, on voit bien qu'il a carrément viré les [00].

      (:•Þ   Pitu
    Sauvez mon hamac, Bouffez Castor !
    2
  2. Pitu Messages postés 1460 Statut Contributeur 125
     
    Je remonte vers la surface ...

      (:•Þ   Pitu
    Sauvez mon hamac, Bouffez Castor !
    1
  3. sioban
     
    Moi j'ai eu le même problème, j'ai utilisé dos2unix

    Pour un fichier
    cat fic.txt | dos2unix >newfic.txt

    ou pour une variable

    result=`echo $result | dos2unix`
    1
  4. francoispgp
     
    en aiFTéPeutant dans le bon mode !
    (ascii/binaire)

    tout simplement

    si apres il reste des caracteres bidons (c'est pas possible en theorie, mais bon) dans vi et uniquement dans VI ! tu fais
    :s/^M//
    pour avoir le controlM quand tu tappes cette commande tu tapes en realitee ca :
    :s/[CONTROL+V][ENTER]//
    control+v etant la touche control+v en meme temps
    et enter la touche entree.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. francoispgp
     
    PS: tu peux le faire dans un script VI a condition d'ecrire celui ci avec VI.

    #!/usr/bin/ksh
    .........
    vi foo.bar << EOT
    :s/^M//
    :x!
    EOT
    ..........
    exit 0
    0
  7. Pitu Messages postés 1460 Statut Contributeur 125
     
    Bonjour et merci de ta réponse.
    Mais malheureusement, elle ne me convient pas vraiment :
    En effet, si j'ai ce pb de caractères ^M, c'est bien à cause du ftp Samba, mais je ne peux traiter la cause à la base. C'est donc pourquoi je cherche à trouver une solution pour les éliminer à postériori.
    Reste donc la solution par script ou par shell (cf début du post).
    Et ça marche : ça m'enlève bien les ^M. Mais ça, je l'avais déjà fait.
    Pb : ça n'enlève pas que ça puisque les commandes de l'éditeur suppriment également les caractères "null" (hexa : [00]).
    Et ça, je ne veux pas.
    Si quelqu'un a une solution ...
    (Batmat, t'es pas là ???)
      (:•Þ   Pitu
    Sauvez mon hamac, Bouffez Castor !
    0
  8. francoispgp
     
    je viens de tester ca ne vire pas le caractere $00.
    ni sur linux ni sur tru64Unix.
    0
  9. francoispgp
     
    ben ouai je cromprend pas...
    normalement ca marche...
    quelle idee de bosser sur IBM aussi...
    lol ;-)
    0
  10. coppernix Messages postés 63 Statut Membre 4
     
    Bonjour,
    Pour traiter du binaire, il faut utiliser une commande adéquate telle que hexedit.
    Sinon, essaie les commandes telles que dos2unix.
    0
    1. Pitu Messages postés 1460 Statut Contributeur 125
       
      Merci de ta réponse, Coppernix, mais je suis sur AIX, avec les commandes de bases du Korn-shell ...

        (:•Þ   Pitu
      Ni modo, ni même quasi modo
      0
  11. sioban
     
    Moi j'ai eu le même problème, j'ai utilisé dos2unix

    Pour un fichier
    cat fic.txt | dos2unix >newfic.txt

    ou pour une variable

    result=`echo $result | dos2unix`
    0
  12. KALAIX
     
    sous vi

    1,$s/[CONTROL+V][ENTER]//g

    cette cmd fera tout le fichier et toutes les lignes
    0
  13. tolos
     
    bonjour
    comment convertir le caractère Hexadécimal 00 en 20 sur AIX si l'on a pas dos2unix ni hexedit.
    0
    1. jisisv Messages postés 3678 Statut Modérateur 936
       
      Tu commences par ouvrir un nouveau sujet.
      Celui-ci a été initié en septembre 2003 de notre ère (heureusement).
      0