Rechercher : dans
Par :

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

Dernière réponse le 18 nov 2008 à 11:18:37 Pitu, le 23 sep 2003 à 09:00:04 
 Signaler ce message aux modérateurs

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 !

Meilleures réponses pour « [ksh] vi, sed et caractères "null" et & » dans :
Sed - Introduction à SED - Part II Voir SED - The Stream EDitor - Part II Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Sed - Supprimer une ou plusieurs lignes d'un fichier VoirSupprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Sed - Substitution VoirSubstitution Substitution basique Simple Globale Ciblée Substitution conditionnée Simplee Avancée Bloc Avancéé Substitution basique Simple - 1ère occurrence (de chaque ligne) rencontrée uniquement sed 's/la/LA/' fichier.txt
Télécharger Tweak VI VoirTweak VI Basic est un utilitaire permettant d'optimiser et de personnaliser Windows Vista. Voici un aperçu des fonctionnalités de Tweak VI: Activation de centaines de paramètres cachés de Windows vista Nettoyage de la base de registre ...
Linux - L'éditeur Vi VoirIntroduction à Vi Vi est un des éditeurs de texte les plus populaires sous les systèmes de type Unix (avec Emacs et pico) malgré son ergonomie très limitée. Sous Linux il existe une version libre de Vi appelée Vim (Vi Improved). Vi (prononcez...
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...

1

Pitu, le 26 sep 2003 à 08:36:31
  • +1

Je remonte vers la surface ...

  (:•Þ   Pitu

Sauvez mon hamac, Bouffez Castor !

Répondre à Pitu

2

francoispgp, le 26 sep 2003 à 10:51:43

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.

Répondre à francoispgp

3

francoispgp, le 26 sep 2003 à 10:54:40

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

Répondre à francoispgp

4

Pitu, le 26 sep 2003 à 13:03:17

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 !

Répondre à Pitu

5

francoispgp, le 26 sep 2003 à 13:06:07

Je viens de tester ca ne vire pas le caractere $00.
ni sur linux ni sur tru64Unix.

Répondre à francoispgp

6

Pitu, le 26 sep 2003 à 13:21:14
  • +2

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 !

Répondre à Pitu

7

francoispgp, le 26 sep 2003 à 13:58:21

Ben ouai je cromprend pas...
normalement ca marche...
quelle idee de bosser sur IBM aussi...
lol ;-)

Répondre à francoispgp

8

coppernix, le 7 oct 2003 à 09:22:43

Bonjour,
Pour traiter du binaire, il faut utiliser une commande adéquate telle que hexedit.
Sinon, essaie les commandes telles que dos2unix.

Répondre à coppernix

9

Pitu, le 7 oct 2003 à 11:16:14

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

Répondre à Pitu

10

coppernix, le 7 oct 2003 à 12:14:23
Répondre à coppernix

11

sioban, le 18 nov 2008 à 11:18:17

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`

Répondre à sioban

12

 sioban, le 18 nov 2008 à 11:18:37

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`

Répondre à sioban