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

Fermé
Pitu Messages postés 1440 Date d'inscription jeudi 3 octobre 2002 Statut Contributeur Dernière intervention 5 janvier 2013 - 23 sept. 2003 à 09:00
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 29 août 2016 à 15:56
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 !
A voir également:

13 réponses

Pitu Messages postés 1440 Date d'inscription jeudi 3 octobre 2002 Statut Contributeur Dernière intervention 5 janvier 2013 125
26 sept. 2003 à 13:21
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
Pitu Messages postés 1440 Date d'inscription jeudi 3 octobre 2002 Statut Contributeur Dernière intervention 5 janvier 2013 125
26 sept. 2003 à 08:36
Je remonte vers la surface ...

  (:•Þ   Pitu
Sauvez mon hamac, Bouffez Castor !
1
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
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

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
0
Pitu Messages postés 1440 Date d'inscription jeudi 3 octobre 2002 Statut Contributeur Dernière intervention 5 janvier 2013 125
26 sept. 2003 à 13:03
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
je viens de tester ca ne vire pas le caractere $00.
ni sur linux ni sur tru64Unix.
0
ben ouai je cromprend pas...
normalement ca marche...
quelle idee de bosser sur IBM aussi...
lol ;-)
0
coppernix Messages postés 63 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 18 septembre 2004 4
7 oct. 2003 à 09:22
Bonjour,
Pour traiter du binaire, il faut utiliser une commande adéquate telle que hexedit.
Sinon, essaie les commandes telles que dos2unix.
0
Pitu Messages postés 1440 Date d'inscription jeudi 3 octobre 2002 Statut Contributeur Dernière intervention 5 janvier 2013 125
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
0
coppernix Messages postés 63 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 18 septembre 2004 4
7 oct. 2003 à 12:14
0
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
sous vi

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

cette cmd fera tout le fichier et toutes les lignes
0
bonjour
comment convertir le caractère Hexadécimal 00 en 20 sur AIX si l'on a pas dos2unix ni hexedit.
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
29 août 2016 à 15:56
Tu commences par ouvrir un nouveau sujet.
Celui-ci a été initié en septembre 2003 de notre ère (heureusement).
0