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 :

Suppression d'une valeur + simple quote et cas particulier dans un fichier.


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Par défaut Suppression d'une valeur + simple quote et cas particulier dans un fichier.
    Bonjour,

    Je débute en script shell et j'ai encore pas mal de mal avec les regex donc je vous prie d'être gentil pour mes questions qui pourront vous sembler "bête" Merci.

    Voila mon problème :

    J'ai un fichier de plusieurs ligne, dans ce fichier j'ai cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    users.allowed = {'0000001', '0000002', '0000003','0000004', '0000005'}
    Mon script aura pour but d'aller supprimer un utilisateur dans le fichier, donc quand on lance le script, on lui indique quel utilisateur supprimer (jusque la je n'ai pas de soucis), chercher ma ligne non plus.

    Par contre ce que je n'arrive pas c'est comment supprimer l'utilisateur ainsi que les simples quote qui l'entoure et au besoin la virgule avant ou après.

    Exemple : je veux supprimer l'utilisateur 0000001 donc ma ligne devra être à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    users.allowed = {'0000002', '0000003','0000004', '0000005'}
    Si je souhaite supprimer l'utilisateur 0000002 ma ligne sera la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    users.allowed = {'0000001', '0000003','0000004', '0000005'}
    Et pareil pour la suppression de l'utilisateur 0000005
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    users.allowed = {'0000001', '0000002', '0000003','0000004'}
    Voila les 3 cas possible a prendre en compte, si l'utilisateur est le premier alors il faut le supprimer ainsi que les simples quote et la virgule après lui,
    Si l'utilisateur est le dernier de la liste, alors on le supprime ainsi que les simples quote et la virgule qui est juste avant
    Et si l'utilisateur est entouré d'autres utilisateurs alors il faut le supprimer, supprimer les simples quote et une virgule avant ou après.

    J'espère avoir été clair, je vous remercie pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut,

    je réfléchissais si y avait moyen de faire ça simplement avec sed mais je n'ai pas réussi en une fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    utilisateur='0000001'
    sed -s "/users.allowed/ s/'${utilisateur}'[[:space:]]*,[[:space:]]*//" fichier
    sed -s "/users.allowed/ s/[[:space:]]*,[[:space:]]*'${utilisateur}'//" fichier
    qu'on peut normalement regrouper en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -s "/users.allowed/ {s/'${utilisateur}'[[:space:]]*,[[:space:]]*//; s/[[:space:]]*,[[:space:]]*'${utilisateur}'}" fichier
    Attention le -s de sed modifie ton fichier.

    Il est toujours possible de lire le fichier ligne par ligne en bash,
    renvoyer les lignes non concernées,
    lorsque l'on tombe sur la bonne ligne, un petit if qui teste s'il y a une virgule après ou non,
    un echo de la ligne modifier
    et on finit de renvoyer le reste.

    Mais c'est plus long à programmer et sûrement moins rapide.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 357
    Par défaut
    @hizoka, ce n'est pas le -s qui modifie le fichier, c'est le -i.

    Ta ligne ressemble étrangement à un ensemble en python, est-ce le cas ?

    Et si oui, pourquoi ne pas le faire en python ?

    Et sinon, comment cela se passe si la liste des utilisateurs est sur plusieurs lignes ?

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

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

    Citation Envoyé par hizoka Voir le message
    Attention le -s de sed modifie ton fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ echo > 1
    $ echo > 2
    $ echo > 3
    $ sed -s 's@^@blablabla@' 1 2 3
    blablabla
    blablabla
    blablabla
    $ cat 3 
     
    $
    Euh... pas chez moi.

  5. #5
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 268
    Par défaut
    Merci hizoka, j'ai pris ton premier exemple en plusieurs lignes et ça fonctionne.

    Encore merci pour vos réponses et votre rapidité

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 357
    Par défaut
    Un sed en boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ utilisateur='0000001'
    $ echo "users.allowed = {'0000001', '0000002', '0000003','0000004', '0000005'}" | sed ":bb;/users.allowed/s/\({\) *, *\| *, *\(}\)\|[, ]*\('${utilisateur}'\)/\1\2/;tbb"
    users.allowed = {'0000002', '0000003','0000004', '0000005'}
    $ utilisateur='0000002'
    $ echo "users.allowed = {'0000001', '0000002', '0000003','0000004', '0000005'}" | sed ":bb;/users.allowed/s/\({\) *, *\| *, *\(}\)\|[, ]*\('${utilisateur}'\)/\1\2/;tbb"
    users.allowed = {'0000001', '0000003','0000004', '0000005'}
    $ utilisateur='0000005'
    $ echo "users.allowed = {'0000001', '0000002', '0000003','0000004', '0000005'}" | sed ":bb;/users.allowed/s/\({\) *, *\| *, *\(}\)\|[, ]*\('${utilisateur}'\)/\1\2/;tbb"
    users.allowed = {'0000001', '0000002', '0000003','0000004'}

  7. #7
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    @disedorgue : Oups, en effet, me suis planté
    C'est en effet le -i pour la sauvegarde de fichier.
    Désolé.

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

Discussions similaires

  1. [AC-2003] [Requête Union] : renvoyer une valeur par défaut en cas d'absence de résultat
    Par ludovicparis dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/04/2010, 20h25
  2. Suppression d'une valeur d'un tableau d'objets
    Par kanzarih dans le forum Langage
    Réponses: 4
    Dernier message: 07/08/2009, 08h38
  3. Suppression d'une valeur
    Par sami_rio dans le forum Excel
    Réponses: 1
    Dernier message: 27/03/2008, 12h25
  4. Suppression d'une valeur negative
    Par sami_rio dans le forum Excel
    Réponses: 5
    Dernier message: 25/03/2008, 22h25
  5. [SQL] Suppression d'une valeur dans une table
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/09/2007, 20h52

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