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 les 2 lignes précédentes et la suivante


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Par défaut Supprimer les 2 lignes précédentes et la suivante
    Bonjour,
    J'aurais besoin de vos lumières.
    J'essaye de supprimer une série de 4 lignes consécutives. J'arrive bien à "greper" ce que que je veux mais je n'arrive pas à enchaîner par une suppression.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    grep -B2 -A1 test multipath.test
            multipath {
                             wwid           3500122204b
                             alias          test
            }
            multipath {
                             wwid           350002ac104b
                             alias          test_vg_vr
            }
    J'ai essayé de combiner avec l'option "-v" mais ça donne n'importe quoi.
    Pourriez-vous m'aider ?

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ra:/local/iso$ cat toto
    multipath {
    wwid 3500122204b
    alias test
    }
    multipath {
    wwid 350002ac104b
    alias test_vg_vr
    }
    ra:/local/iso$ sed 'N;N;N;N; /test/ d' toto
    wwid 350002ac104b
    alias test_vg_vr
    }
    là j'ai merdé en conservant 3 lignes au lieu de 4 mais c'est le principe

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Quelle est la condition précise de ta suppression ?
    Tu cherches à supprimer un ensemble de lignes précises (commençant par "multipath {" et finissant par "}") si et seulement si elles contiennent le motif "test" ?

    Peut être (et sûrement) que grep n'est pas l'outil idéal

  4. #4
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Par défaut
    Merci frp31 mais j'avoue ne pas comprendre ta solution...
    Idéalement, le but sera de lancer un script avec en paramètre le pattern du grep (ou sed). Ensuite, je cherche à supprimer cette ligne, les deux précédentes et la suivante dans /etc/multipath.conf.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Re-

    Contenu du 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
    $ cat plop
    multipath {
    wwid 3500122204b
    alias test1
    }
    multipath {
    wwid 350002ac104b
    alias test_vg_vr
    }
    multipath {
    wwid 3500122204b
    alias test1
    }
    multipath {
    wwid 350002ac104b
    alias test_vg_vr
    }
    On cherche le motif "test1" et on élimine tout le contenu du multipath contenu entre accolade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ sed '/multipath {$/{:z;N;/}$/!bz;/test1/d}' plop 
    multipath {
    wwid 350002ac104b
    alias test_vg_vr
    }
    multipath {
    wwid 350002ac104b
    alias test_vg_vr
    }
     
    $

  6. #6
    Membre averti
    Inscrit en
    Mars 2011
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 19
    Par défaut
    Vraiment top ta commande zipe31 !!!
    Je vais essayer de la comprendre maintenant...
    Merci beaucoup !

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    /multipath {$/
    Motif de recherche contenant le terme "mutipath" et se terminant ($) par une accolade ouvrante.

    {
    Début du regroupement de commandes. Si le motif est trouvé, les commandes se trouvant entre les accolades seront exécutées.

    :z
    Étiquette. Permet d'effectuer une boucle.

    N
    On ajoute la ligne suivante dans l'espace de travail.

    /}$/!bz
    Si la nouvelle ligne ajoutée ne comprends pas (le caractère "!" signifie la négation) le motif "/}$/" (une accolade fermante en fin de ligne), on se branche (commande "b") à l'étiquette "z"préalablement définie, et ce autant de fois que nécessaire.

    /test1/d
    Une fois la ligne avec le motif "}" trouvée, on teste si l'ensemble des lignes contient le motif "test1", et si c'est le cas on supprime (commande "d") le tout.

    }
    Fin du regroupement de commandes.

Discussions similaires

  1. Supprimer les dernières lignes d'un fichier
    Par eleana dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 03/11/2017, 10h55
  2. supprimer les dernières lignes vides
    Par buhrne dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/03/2008, 15h08
  3. Supprimer les memes lignes
    Par NapsterVB dans le forum Delphi
    Réponses: 10
    Dernier message: 20/04/2007, 21h02
  4. Supprimer les dernieres lignes et concatener plusieurs fichier
    Par filsdugrand dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 11/04/2006, 21h15
  5. supprimer les dernieres lignes d'un classeur excel
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/12/2005, 11h23

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