À l'aide de Silver Searcher, comment puis-je rechercher:
Autres préférences: aimerait avoir une recherche insensible à la casse et une recherche dans les fichiers de points.
Essayé de faire allusion en utilisant cela sans trop de chance:
alias search="ag -g $1 --smart-case --hidden && ag --smart-case --hidden $1"
Selon la page de manuel de ag
-G --file-search-regex PATTERN
Only search files whose names match PATTERN.
Vous pouvez utiliser l'option -G
pour effectuer des recherches sur les fichiers correspondant à un modèle.
Donc, pour répondre à votre question:
root@Apache107:~/rpm-4.12.0.1# ag -G cpio.c size
rpm2cpio.c
21: off_t payload_size;
73: /* Retrieve payload size and compression type. */
76: payload_size = headerGetNumber(h, RPMTAG_LONGARCHIVESIZE);
la commande ci-dessus recherche Word size
dans tous les fichiers correspondant au modèle cpio.c
Référence:
page de manuel de ag
version 0.28.0
Si vous recherchez une chaîne dans certains types de fichiers, disons tout le code source C, il existe une fonctionnalité non documentée in ag
pour vous aider à limiter rapidement les recherches à certains types de fichiers.
Les commandes ci-dessous à la fois recherchent foo
dans tous les fichiers php:
find . -name \*.php -exec grep foo {}
ag --php foo
Alors que find + grep
recherche tous les fichiers .php
, le commutateur --php
de la commande ag
recherche en fait les extensions de fichier suivantes:
.php .phpt .php3 .php4 .php5 .phtml
Vous pouvez utiliser --cpp
pour les fichiers source C++, --hh
pour les fichiers .h
, --js
pour JavaScript, etc. Une liste complète est disponible ici
Essayez d'ajouter ceci à votre fichier d'alias. Testé avec zsh mais devrait fonctionner avec bash. Le problème que vous avez rencontré dans votre exemple est que les alias bash ne peuvent pas prendre de paramètres. Vous devez donc d'abord définir une fonction pour utiliser le (s) paramètre (s), puis affecter votre alias à cette fonction.
searchfunction() {
echo $(ag -g $1 --hidden)
echo $(ag --hidden -l $1)
}
alias search=searchfunction
Vous pouvez modifier cet exemple pour l'adapter à votre objectif de plusieurs manières, par exemple:
-l
selon que vous voulez ou non que les résultats de texte affichent la correspondance de texte ou uniquement le nom du fichier[Edit: suppression du drapeau inutile --smart-case selon le commentaire de Pablo Bianchi]
J'ai trouvé cette question en cherchant la même réponse moi-même. Il ne semble pas que ag
ait une capacité native de rechercher des noms de fichiers et de répertoires. Les réponses ci-dessus de Zach Fogg et Jikku Jose fonctionnent toutes les deux, mais la tuyauterie find .
peut être très lente si vous travaillez dans un grand répertoire.
Je recommanderais d'utiliser find
directement, ce qui est beaucoup plus rapide que de le passer par ag
:
Linux (version GNU de find
)
find -name [pattern]
OSX (version BSD de find
)
find [pattern]
Si vous avez besoin de plus d'aide avec find
, ce guide de Digital Ocean, c'est plutôt bien. J'inclus ceci car les pages de manuel de find
sont excessivement denses si vous voulez simplement comprendre l'utilisation de base.
Essaye ça:
find . | ag "/.*SEARCHTERM[^/]*$"
La commande find .
listera tous les fichiers.
Nous dirigeons la sortie de cela vers la commande ag "/.*SEARCHTERM[^/]*$"
, qui correspond à SEARCHTERM si elle se trouve dans le nom du fichier, et pas seulement le chemin complet.