Forum Programmation.shell Suppression lignes avec plusieurs patterns

Posté par  .
Étiquettes : aucune
0
15
sept.
2010
Bonjour,

je suis confronté a un petit problème de scripting shell,
je cherche a supprimer toutes les lignes contenant un pattern, mais j'ai plein de pattern différent a matcher.

J'ai testé cela, mais ca ne me supprime que la ligne qui match le pattern 1, je me demande ce que j'ai pu faire comme erreur pour que le pattern 2 ne soit pas pris en compte:

awk '$1 !~ /pattern1/ && $2 !~ /pattern2/ '


Avec cette commande, la ligne contenant pattern1 est bien supprimée, mais pas celle contenant pattern2.

Toute aide serait la bienvenue, parce que je vois pas trop ou erreur il y a.

D'avance merci
  • # grep -v?

    Posté par  . Évalué à 3.

    avec l'option -F c'est encore mieux

    grep -vF 'il
    faut
    retirer
    des
    mots
    totalement
    inutile' fichier.txt

    ou une autre variante
    grep -vFE 'j[as][vs]a?
    Cdiese
    [dD]ieu' plop.txt

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: grep -v?

      Posté par  . Évalué à 1.

      Plop,

      Haaaaaaaaaaaaaaaaa quel idiot j'ai même pas pensé au grep -v...
      bon du coup ca marche au poil maintenant, j'ai un peu retouché ta commande, mais j'ai ce que je voulais (suis happy quoi ^^)

      grep -vF -e "pattern1" -e "pattern2"

      On cherche compliqué alors que c'est parfois si simple :)=
      Grand merci.
  • # tu ne matches pas ta ligne...

    Posté par  . Évalué à 3.

    Mais seulement le premier champ ($1) et le deuxième champ ($2).
    Essaie avec awk '$0 !~ /pattern1/ && $0 !~ /pattern2/ '.
    Il vaudrait d'ailleurs mieux faire un awk '$0 !~ /pattern1|pattern2/ ' ou encore un grep -v "pattern1|pattern2" ce sera plus rapide.
    • [^] # Re: tu ne matches pas ta ligne...

      Posté par  . Évalué à 1.

      Hummmm neologix, ta 2ème commande me plait bien aussi.

      la 3ème ne passe pas, peut etre avec un egrep, sinon le grep évalue le pipe comme un caractère normal j'ai l'impression (suis pas expert en shell non plus, je dis donc peut etre des conneries)

      Etant donné que je dois avoir une dizaine de pattern a matcher, la premiere solution proposé va m'obliger a avoir ma commande sur 5 lignes, pour ceux qui utiliseront le script après moi, ca deviendrait illisible.

      Merci a vous 2 en tout cas :)

      Bonne journée
      • [^] # Re: tu ne matches pas ta ligne...

        Posté par  . Évalué à 3.

        Effectivement, il faut utiliser egrep, ou bien échapper le pipe :
        grep -v 'pattern1\|pattern2'

        Pour les détails :
        man grep | grep -A 10 'Basic vs Extended'

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.