Recherche de lignes avec find et grep

Résolu/Fermé
razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012 - 28 oct. 2010 à 15:16
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 29 oct. 2010 à 00:56
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

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié par mamiemando le 28/10/2010 à 15:25
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
dna.factory Messages postés 24954 Date d'inscription mercredi 18 avril 2007 Statut Modérateur Dernière intervention 25 avril 2024 1 609
28 oct. 2010 à 17:05
pas mieux..
(ça fait quoi le -nr ? parce que je l'utilise jamais)
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
29 oct. 2010 à 00:56
man grep :)
0
razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012 1
28 oct. 2010 à 18:19
après un man grep :
n : c'est pour afficher le numero de ligne
r : pour une recherche recursive dans le repertoire en question.
0