Recherche de lignes avec find et grep
Résolu
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
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
A voir également:
- Recherche de lignes avec find et grep
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Partage de photos en ligne - Guide
- Find and mount - Télécharger - Récupération de données
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche photo - Guide
2 réponses
Si j'ai bien compris :
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 :
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) :
Bonne chance
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
(ça fait quoi le -nr ? parce que je l'utilise jamais)