Je souhaite rechercher des lignes dans des fichiers contenant deux mots, Word_1
et Word_2
dans l'ordre, comme dans Line A
ci-dessous, mais pas comme dans Line B
ou Line C
:
Line A: ... Word_1 .... Word_2 ....
Line B: ... Word_1 ....
Line C: ... Word_2 ....
J'ai essayé
$ack '*Word_1*Word_2'
$ack '(Word_1)+*(Word_2)+'
et les mêmes commandes avec ^
ajouté au début de l'expression régulière (pour essayer de suivre la syntaxe de l'expression régulière Perl).
Aucune de ces commandes ne renvoie les fichiers ou les lignes qui m'intéressent.
Qu'est-ce que je fais mal?
Merci!
Vous voulez trouver Word_1
, suivi de n'importe quoi, n'importe quel nombre de fois, suivi de Word_2
. Ça devrait être
Word_1.*Word_2
Vous semblez utiliser *
comme il est souvent utilisé dans les recherches en ligne de commande, mais dans les expressions régulières, est-ce un quantificateur pour le caractère précédent, ce qui signifie qu'il correspond au moins 0 fois. Par exemple, l'expression régulière a*
correspondrait à 0 ou plus a
s, alors que l'expression régulière a+
correspondrait à au moins un a
.
Le métacaractère regex signifiant "correspond à tout" est .
, alors .*
signifie "correspond à n'importe quoi, n'importe quel nombre de fois. Voir perlrequick pour une brève introduction sur le sujet.