Recherche de lignes avec find et grep [Résolu/Fermé]

Signaler
Messages postés
242
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
5 décembre 2012
-
Messages postés
29277
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
-
Bonjour,
je cherche depuis un moment la commande qui permet d'obtenir une ligne contenant l'expression1 mais ne contenant pas l'expression2.
Un find /mon_rep/ -name "mon_fic" | xargs grep "expression1" affiche des expression1 du type :
error: blablabla expression1 bliblibli expression2
mais ce que je cherche en fait c'est qu'il affiche uniquement les lignes contenant expression1, soit :
error: blablabla expression1 bliblibli.

Merci d'avance pour votre aide

2 réponses

Messages postés
29277
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
6 929
Si j'ai bien compris :

grep -nr expr1 /mon/rep | grep -v expr2


Le premier grep fouille dans l'arborescence /mon/rep. La seconde filtre le résultat du premier grep et vire toutes les lignes contenant expr2. À noter que expr1 et expr2 sont en réalité des expressions régulières. Pour plus de détails sur ce que c'est et comment ça fonctionne :

man grep


Si tu veux filtrer les messages d'erreur, attention, un pipe | ne mouline que le flux écrit dans la sortie standard (stdout) et pas dans stderr. Si tu veux masquer les erreurs, il suffit de rediriger ce flux dans /dev/null. Vu que seul le premier grep est susceptible d'écrire des erreurs, on effectue la redirection à son niveau (mais a priori on pourrait en mettre une en place pour le 2nd grep également) :

grep -nr expr1 /mon/rep 2> /dev/null | grep -v expr2


Bonne chance
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60921 internautes nous ont dit merci ce mois-ci

Messages postés
19997
Date d'inscription
mercredi 18 avril 2007
Statut
Contributeur
Dernière intervention
22 septembre 2020
1 489
pas mieux..
(ça fait quoi le -nr ? parce que je l'utilise jamais)
Messages postés
29277
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
6 929
man grep :)
Messages postés
242
Date d'inscription
lundi 17 décembre 2007
Statut
Membre
Dernière intervention
5 décembre 2012
1
après un man grep :
n : c'est pour afficher le numero de ligne
r : pour une recherche recursive dans le repertoire en question.