[ksh] vi, sed et caractères "null" et &
                    
        
     
             
                    Pitu
    
        
    
                    Messages postés
            
                
     
             
            1460
        
            
                                    Statut
            Contributeur
                    
                -
                                     
jisisv Messages postés 3678 Statut Modérateur -
        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 :
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
                
            
                
    
    
    
        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 !
        A voir également:         
- [ksh] vi, sed et caractères "null" et &
- Caractères spéciaux - Guide
- Caractères ascii - Guide
- Caracteres speciaux - Guide
- Caractères spéciaux mac - Guide
- Exemple de mot de passe à 8 caractères - Guide
13 réponses
                        
                            
                    Ben ...  sur un AIX, si.
Pour preuve :
Edition du fichier par Ultra-Edit via Samba :
En hexa :
Maintenant, sous vi :
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 :
Et en bas :
=> 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
    
                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^MAvec 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 !
                        
                    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`
    
                Pour un fichier
cat fic.txt | dos2unix >newfic.txt
ou pour une variable
result=`echo $result | dos2unix`
                        
                    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.
    
                (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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
                        
                    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
    
                #!/usr/bin/ksh
.........
vi foo.bar << EOT
:s/^M//
:x!
EOT
..........
exit 0
                        
                    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
    
                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 !
                        
                    ben ouai je cromprend pas...
normalement ca marche...
quelle idee de bosser sur IBM aussi...
lol ;-)
    
                normalement ca marche...
quelle idee de bosser sur IBM aussi...
lol ;-)
                        
                    Bonjour,
Pour traiter du binaire, il faut utiliser une commande adéquate telle que hexedit.
Sinon, essaie les commandes telles que dos2unix.
    
                Pour traiter du binaire, il faut utiliser une commande adéquate telle que hexedit.
Sinon, essaie les commandes telles que dos2unix.
