Pour ag
, à partir de la version 0.19.2, la recherche par défaut dans les répertoires et les fichiers est récursive.
Pour rechercher plusieurs modèles, vous pouvez utiliser une syntaxe similaire comme ack
ag 'pattern1|pattern2'
recherchera à la fois pattern1
et pattern2
.
Si vous ne souhaitez pas effectuer de recherche récursive, vous pouvez définir la profondeur de recherche sur 1 à l'aide du commutateur --depth NUM
Par conséquent,
ag 'pattern1|pattern2' --depth 1
recherchera uniquement dans le répertoire courant pour les deux modèles.
Cela devrait suffire :
ack -R 'string1|string2'
Comme -R
est la valeur par défaut, vous pouvez l'omettre :
ack 'string1|string2'
À partir de man ack
:
-r , -R , --recurse
Recurse dans les sous-répertoires. C'est la valeur par défaut et juste ici pour la compatibilité avec grep. Vous pouvez également l'utiliser pour désactiver --no-recurseoff.
Si vous souhaitez obtenir le modèle à partir d'un fichier, par exemple /path/to/patterns.file, vous pouvez utiliser :
ack "$(cat /path/to/patterns.file)"
ou de manière équivalente :
ack "$(< /path/to/patterns.file)"
Je ne trouve pas d'équivalent exact à grep -f
.
La commande ack peut également contenir des chaînes avec des tubes. Par exemple, le premier ack trouve les fichiers contenant pattern1 puis dirigez-le vers un autre accusé de réception pour rechercher uniquement ces fichiers pour motif2
ack -l 'pattern1' | ack -x 'pattern2'
Le -l Le paramètre signifie simplement lister les fichiers correspondants (au lieu du texte correspondant). Le -x Le paramètre signifie rechercher uniquement les fichiers qui lui sont redirigés. Ceci est similaire à la réduction des fichiers pour la prochaine recherche d'accusé de réception.
ack -l 'pattern1' | ack -xl 'pattern2' | ack -x 'pattern3'
Ceci est un ET et non l'opérateur OU donné dans les autres solutions.