[ksh] vi, sed et caractères "null" et &
Pitu
Messages postés
1441
Date d'inscription
Statut
Contributeur
Dernière intervention
-
jisisv Messages postés 3645 Date d'inscription Statut Modérateur Dernière intervention -
jisisv Messages postés 3645 Date d'inscription Statut Modérateur Dernière intervention -
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
- Caractères spéciaux mac - Guide
- Caracteres speciaux - 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.
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`