Ack search for literal strings [fermé]

15

J'en ai assez de devoir échapper aux choses quand je veux chercher une partie d'une balise html.

Comment puis-je rechercher exactement ce que je tape sans avoir à échapper?

par exemple

ack-grep 'console.log(foo'

Je reçois:

Unmatched ( in regex; marked by <-- HERE in m/console.log( <-- HERE par/
testeur
la source
Utilisez un autre shell? Mettez-le entre guillemets? Placez votre chaîne de recherche dans un fichier, je suppose qu'ack-grep peut obtenir la chaîne d'un fichier. Peut-être pourriez-vous même obtenir la recherche via stdin.
Zoredache
@Zoredache J'ai ajouté un meilleur exemple .. Je ne veux pas avoir à m'échapper (.. et qu'entendez-vous par un meilleur shell?
testeur
Je veux dire que tous les caractères dont vous vous plaignez sont gérés par votre shell (bash / zsh / peu importe). Le problème n'a rien à voir avec l'outil. Le problème est que le shell n'envoie pas ce que vous tapez.
Zoredache
Ah je pense que je l'ai trouvé .. -Q l'utilise littéralement ..
testeur

Réponses:

18

Vous devez échapper à l'expression régulière.

ack 'console\.log\(foo'

(Vous devez échapper à la .afin de ne pas correspondre à "consoleflog", car .correspond à n'importe quel caractère unique)

Et si vous préférez ne pas le faire, faites-le pour citer automatiquement chaque métacaractère.

ack -Q 'console.log(foo'
Andy Lester
la source
2
\ Q ne fonctionne pas sur mon serveur. ack '\Qconsole.log(foo' ack: Invalid regex '\Qconsole.log(foo': Unmatched ( in regex; marked by <-- HERE in m/\Qconsole.log( <-- HERE foo/
Sébastien
Je me suis trompé sur l' \Qexemple et l'ai supprimé de la réponse. Merci, @ Sébastien.
Andy Lester