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

Shell et commandes GNU Discussion :

Supprimer ligne d'un fichier en bash


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2014
    Messages : 22
    Par défaut Supprimer ligne d'un fichier en bash
    Bonjour,
    je chercher à supprimer une ligne d'un fichier en bash et bien toute la ligne, pour l'instant je réussi à supprimer les caractères de la ligne mais pas le retour à la ligne, voici mon code actuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ligne=$1
    sed $ligne'd' liste.txt
    Merci d'avance

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 678
    Par défaut
    bizarre... le fichier a été créé sur linux ? sinon man fromdos.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2014
    Messages : 22
    Par défaut
    Oui , en fait je cherche surtout à supprimer une ligne et avec sed je n'y arrive pas.

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Bonjour,

    ce que tu as écrit supprime le retour à la ligne. Pour garder le retour à la ligne, il aurait fallu écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed $ligne's/.*//' liste.txt
    Si le résultat ne correspond pas à tes attentes, poste le fichier de départ, le fichier d'arrivée obtenu, le fichier d'arrivée souhaité.

    Est-il indiscret de demander ce que tu as en entrée ($1) de ton script?

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 857
    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 857
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cycycysisisi Voir le message
    ...pour l'instant je réussi à supprimer les caractères de la ligne mais pas le retour à la ligne
    Bonjour

    Chez-moi, sed 1d fichier me donne bien (à l'écran attention) le fichier ôté de sa première ligne. Je ne vois pas pourquoi ça ne fonctionne pas chez-toi. Il nous faudrait une ligne d'exemple de ton fichier pour y voir plus clair. Et éventuellement ta ligne pipée sur od -c pour voir aussi les caractères cachés...

    Citation Envoyé par N_BaH Voir le message
    sinon man fromdos.
    Tiens ? Connaissais pas. Plus habitué à unix2dos et dos2unix...

    Citation Envoyé par Flodelarab Voir le message
    Citation Envoyé par cycycysisisi Voir le message
    Oui , en fait je cherche surtout à supprimer une ligne
    Pour garder le retour à la ligne, il aurait fallu écrire...
    Le monsieur ne veut pas garder le retour à la ligne puisqu'il cherche surtout à supprimer une ligne...
    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]

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2014
    Messages : 22
    Par défaut
    Voici ou j'en suis,
    le code que j'utilise pour comprendre comment ça fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cat liste.txt
    echo "suppression"
    ligne=$1
    sed  $ligne'd' liste.txt
    echo "resulat"
    cat liste.txt
    et le résultat que j’obtiens, le problème actuel est que sed supprime bien la ligne mais ne remplace pas dans le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    -bash-4.1$ sh tests 5
    13151
    13152
    13153
    13154
    13155
    13156
    13157
    13158
    13159
    13160
    suppression
    13151
    13152
    13153
    13154
    13156
    13157
    13158
    13159
    13160
    resulat
    13151
    13152
    13153
    13154
    13155
    13156
    13157
    13158
    13159
    13160

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Jusqu'ici tout va bien. Sed supprime bien ta ligne. Le fichier d'entrée n'a pas de raison de changer. Il faut rediriger la sortie vers un fichier.

    Si tu veux modifier le fichier d'entée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i.bak $ligne'd' liste.txt

  8. #8
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juin 2014
    Messages : 22
    Par défaut
    Le changement fonctionne bien, merci pour la réponse,

    voici le code final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cat liste.txt
    echo "suppression"
    ligne=$1
    sed -i.bak  $ligne'd' liste.txt
    echo "resulat"
    cat liste.txt

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 857
    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 857
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cycycysisisi Voir le message
    ...le problème actuel est que sed supprime bien la ligne mais ne remplace pas dans le fichier
    Ah là déjà ce n'est plus du tout le même problème que celui énoncé dans ton premier post où tu disais que cela ne supprimait pas la ligne mais seulement les caractères qui y sont.
    D'où la nécessité de bien expliquer les choses dès le départ et non de donner une vague approximation si tu veux avoir des réponses adaptées. Tu remarqueras toutefois que j'avais envisagé cette possibilité d'où le petit "à l'écran attention" de mon post précédent.

    Citation Envoyé par cycycysisisi Voir le message
    voici le code final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i.bak  $ligne'd' liste.txt
    Again (cf ton autre topic http://www.developpez.net/forums/d14...d-fichier-bash) si tu veux isoler un nom de variable, utilise l'outil dédié à ce travail (les accolades) au lieu de ton petit bricolage avec tes quottes simples...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i.bak  ${ligne}d liste.txt
    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]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire une ligne d'un fichier en bash
    Par cycycysisisi dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 25/06/2014, 16h13
  2. Réponses: 5
    Dernier message: 03/05/2011, 11h03
  3. Supprimer ligne dans un fichier text
    Par Gad29 dans le forum Langage
    Réponses: 10
    Dernier message: 23/05/2007, 09h31
  4. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30
  5. Supprimer la premiere ligne d'un fichier
    Par Kahiba dans le forum Langage
    Réponses: 7
    Dernier message: 11/02/2003, 10h18

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