IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Utilisation de la commande sed avec un fichier contenant des caractères null


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 59
    Points : 28
    Points
    28
    Par défaut Utilisation de la commande sed avec un fichier contenant des caractères null
    Bonjour à tous,

    Je recherche depuis plusieurs jours une solution à mon problème, mais en vain...

    Je suis sûr d'avoir une réponse rapide ici.

    Je souhaites extraire certaines lignes d'un fichier. Pour ce faire, j'utilise la commande sed. Mais lors de cette opération, les caractères "null" contenus dans la ligne ne sont pas reportés dans mon fichier résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n 1,10p fichier_entrant > fichier_sortant
    fichier_entrant :
    5081006496 248030849010139000006796 006 00002800000019600000084000000000 m;NÝ <ª:N2 ϳ¾F  ƒ

    fichier_sortant :
    5081006496 248030849010139000006796 006 00002800000019600000084000000000 m;NÝ <ª:N2ϳ¾Fƒ

    Les caractères manquants ont le code Ascii 00 (caractère null)

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Ben sed est fait à la base pour traiter des fichiers textes. Il reprend en fait les principes de l'éditeur "ed" (éditeur minimal de fichier texte qui est devenu la base de "vi") mais peut s'intégrer dans un flux (d'où son nom "sed" => Stream Editor => Editeur de flux).
    Donc tout ce que tu peux traiter avec "vi" ou "ed" tu pourras le traiter avec "sed". Mais ces éditeurs ne sont pas fait pour des fichiers binaires.

    Je ne garantis pas le résultat mais tu peux essayer avec "awk"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{if (NR <= 10) printf("%s\n", $0)}' fichier_entrant > fichier_sortant
    Maintenant si ton besoin n'est pas plus complexe que récupérer les 10 premières lignes, alors head te suffira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    head -10 fichier_entrant > fichier_sortant
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    printf "blabla\x00blabla"
    blablablabla
     
    printf "blabla\x00blabla" | sed 's/a/c/g' | od -c
    0000000   b   l   c   b   l   c  \0   b   l   c   b   l   c
    0000015
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    printf "blabla\x00blabla"
    blablablabla
     
    printf "blabla\x00blabla" | sed 's/a/c/g' | od -c
    0000000   b   l   c   b   l   c  \0   b   l   c   b   l   c
    0000015
    ...
    ?
    Ouaip, t'as raison. sed garde le \0. Pas d'explication.
    Toutefois si ton problème reste simplement de garder les 10 premières lignes, alors le head suffira...

    Remarque: pour être sûr que le sed fonctionne (ou ne fonctionne pas)
    1) tu fais ton sed 1,10p >ficA
    2) tu fais un head -10 >ficB
    Puis tu fais un cmp ficA ficB
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Utilisation de la commande sed avec variable
    Par elfide dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/12/2011, 17h56
  2. Fichier contenant des caractères cyrilliques
    Par DSGSLA dans le forum Windows
    Réponses: 1
    Dernier message: 06/08/2010, 14h49
  3. Réponses: 11
    Dernier message: 26/07/2009, 15h58
  4. Réponses: 11
    Dernier message: 06/04/2009, 01h46
  5. Réponses: 2
    Dernier message: 16/11/2008, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo