Grep, ignore les avertissements


51

J'essaie de trouver le répertoire d'installation d'un paquet particulier. J'ai un certain mot-clé à l'aide duquel j'essaie de trouver un fichier particulier.

Pendant grep, je souhaite uniquement inclure le type de fichier cpp ou h . Je ne veux pas que le grep affiche des avertissements tels que Autorisation refusée ou Impossible de trouver le répertoire . Je veux juste qu'il affiche les fichiers correspondants, rien d'autre. S'il vous plaît suggérer comment puis-je faire cela?

J'utilise actuellement

grep "My term" -ir --exclude-dir="\.svn" --include=*.{cpp,h} ./

Réponses:


58

Ces avertissements sont dirigés vers le stderrflux, par opposition au descripteur de fichier standard. Vous pouvez désactiver la sortie stderr en ajoutant 2>/dev/nullà la fin de votre commande.


Soyez plus précis, find . 2>/dev/null | grep 404.htmlc'est à quoi ressemblerait une commande
— csga5000

30

Plus directement que le filtrage des avertissements, vous pouvez les désactiver en ajoutant -s:

grep "My term" -sir --exclude-dir="\.svn" --include=*.{cpp,h} ./

Il y a quelques problèmes de compatibilité avec cette option. Cependant, cela ne devrait pas être un problème pour un usage personnel.

-s, --no-messages: supprime les messages d'erreur concernant des fichiers inexistants ou illisibles. Note sur la portabilité: contrairement à GNU grep, grep n'était pas conforme à POSIX dans la 7e édition, car il lui manquait l'option -q et son option -s se comportait comme l'option -q de GNU grep. De même, grep manquait de l'option -q mais son option -s se comportait comme GNU grep. Les scripts de shell portables devraient éviter à la fois les options -q et -s et devraient plutôt rediriger les sorties standard et d'erreur vers / dev / null. (-s est spécifié par POSIX.)


Je viens d'installer 13.04 et j'obtiens les erreurs que je ne recevais pas avec 12.04. Serait-ce que quelque chose a changé? Je pensais que c’était cool que grep arrête de mettre en garde sur le fait que les fichiers sont des répertoires, car dans la plupart des cas, cela m’importe!
— Alexis Wilke

Désolé, je suis toujours sur 12.10, donc je ne peux pas le confirmer.
— Sebastian vom Meer

5

J'avais l'habitude de recevoir une tonne de messages ennuyeux comme celui-ci:

grep: commands: Is a directory
grep: events: Is a directory
grep: views: Is a directory

La raison en est que le --directoriesdrapeau est paramétré par défaut read. Je l'ai changé pour recurse; si vous ne voulez pas qu'il fasse automatiquement une recherche récursive, vous pouvez utiliser à la skipplace.

Le moyen le plus simple de gérer cela en permanence est de le définir dans une variable d'environnement. Dans ~/.bash_profileou ~/.bashrcselon votre distribution:

export GREP_OPTIONS='--directories=recurse'

Maintenant, il supprime automatiquement ces messages chaque fois que j'utilise grep.

Une autre option est le --no-messagesdrapeau, en abrégé -s. Cela éliminera également les Is a directorymessages, mais supprimera également les autres messages qui pourraient être plus utiles. Par exemple, si vous effectuez une recherche imbriquée */*/*et qu'aucun fichier de ce type n'existe, cela ne vous le dira pas.


bonne explication
— aldr

1

Une approche alternative au lieu de procéder de grepmanière récursive -ir serait de laisser la findcommande (qui est récursive par défaut) de gérer les autorisations avec -readableindicateur et le chemin à exclure avec -not -path "*.svn*"indicateurs, puis de transmettre le fichier à grep. L'exclusion de répertoires est effectuée via -type fpour ne rechercher que des fichiers normaux.

$ find . -not -path "*.svn*" -type f -name "*.cpp" -or -name "*.h"  -readable -exec grep "my terms" "{}" \; 

0

Lorsque vous effectuez des recherches récursives dans des fichiers spécifiques, il vaut mieux utiliser ack-grep. La syntaxe serait la suivante:

ack-grep -i "My term" --cpp --h

Pour supprimer les messages d'erreur d'autorisation, vous pouvez exécuter la même commande avec sudo:

ack-grep -i "My term" --cpp --h

Toutefois, si vous souhaitez rechercher des packages installés, examinez ces différentes options: https://www.google.com/search?q=ubuntu%20search%20inside%20installed%20packages.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.