[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:
- Vi sed
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Forum Shell
- Toky vi ✓ - Forum TV & Vidéo
- Telecharger vi - Télécharger - TV & Vidéo
- Vi rechercher un mot - Forum Linux / Unix
- Tweak vi - Télécharger - Optimisation
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 ;-)