Plusieurs grep recherche/ignorer les modèles
J'ai l'habitude d'utiliser la suite de pipeline de grep pour une chaîne de recherche et encore ignorer certains autres modèles:
grep -Ri 64 src/install/ | grep -v \.svn | grep -v "file"| grep -v "2\.5" | grep -v "2\.6"
Cela peut-il être réalisé de manière succincte? Je suis de l'utilisation de GNU grep 2.5.3.
- L'utilité de la réponse dépend aussi de chaînes qui sont susceptibles de changer. Si le seul changement de chaîne est "64" pourquoi ne pas créer une fonction ou un script shell pour cela?
Vous devez vous connecter pour publier un commentaire.
Tout tuyau de votre non filtrée de sortie dans une instance unique de grep et de l'utilisation prolongée d'une regexp pour déclarer ce que vous voulez ignorer:
Edit: À la recherche de plusieurs fichiers peut-être essayer
Edit: Ooh. J'ai oublié d'ajouter le truc simple pour arrêter un cringeable utilisation de plusieurs grep instances, à savoir
Le remplacer avec
supprime la nécessité de la deuxième grep.
.svn
.. mais pas les autres modèles.grep -v
qui supprime les noms de fichiers et lesxargs
de sorte quexargs
obtient uniquement les fichiers que vous souhaitez grep pour commencer.grep -v .svn
était censé garder hors matchs à partir de fichiers SVN, comment surfind src/install -type f -name '*.svn' -o -print | xargs fgrep 64 | egrep -lv 'file|2\.[56]'
egrep
est le même quegrep -E
.Utiliser le
-e
option pour spécifier plusieurs modèles:Vous pourriez également être intéressé par le
-F
drapeau, lequel indique que les modèles sont les chaînes fixes au lieu des expressions régulières. Maintenant, vous n'avez pas à échapper à la dot:J'ai remarqué que vous étiez grepping out ".svn". Vous voulez probablement ignorer les répertoires nommés ".svn" dans votre premier récursive grep. Si j'étais vous, je voudrais faire ceci à la place:
vous pouvez utiliser awk au lieu de grep
find | xargs
solution. Faut aussi ajouter l'impression du nom de fichier avant le match afin d'imiter grep comportement, cependant.Peut-être vous voulez utiliser ack-grep qui permettent d'exclure avec perl et ainsi éviter tous les VC répertoires, idéal pour grepping code source.
py.lookup
à partir de pylib.orgLe script suivant va supprimer tous les fichiers à l'exception d'une liste de fichiers: