Téléchargement
illégal
Posez votre question Signaler

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

Pitu 1398Messages postés 3 octobre 2002Date d'inscription 4 avril 2012Dernière intervention - Dernière réponse le 10 mai 2010 à 17:05
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 !
Lire la suite 

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

13 réponses
Réponse
+2
moins plus
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 !
Ajouter un commentaire
Réponse
+1
moins plus
Je remonte vers la surface ...

  (:•Þ   Pitu
Sauvez mon hamac, Bouffez Castor !
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
je viens de tester ca ne vire pas le caractere $00.
ni sur linux ni sur tru64Unix.
Ajouter un commentaire
Réponse
+0
moins plus
ben ouai je cromprend pas...
normalement ca marche...
quelle idee de bosser sur IBM aussi...
lol ;-)
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,
Pour traiter du binaire, il faut utiliser une commande adéquate telle que hexedit.
Sinon, essaie les commandes telles que dos2unix.
Pitu- 7 oct. 2003 à 11:16
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
Ajouter un commentaire
Réponse
+0
moins plus
OK, va voir ici :
http://aixpdslib.seas.ucla.edu/packages/hexedit.html
Ajouter un commentaire
Réponse
+0
moins plus
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`
Ajouter un commentaire
Réponse
+0
moins plus
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`
Ajouter un commentaire
Réponse
+0
moins plus
sous vi

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

cette cmd fera tout le fichier et toutes les lignes
Ajouter un commentaire
Ce document intitulé « [ksh] vi, sed et caractères "null" et & » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?