Mon but est de trouver toutes les occurrences "<?=
" avec ack. Comment puis je faire ça?ack-grep: caractères échappés
ack "<?="
Ne fonctionne pas. S'il vous plaît dites-moi comment puis-je réparer échapper ici?
Mon but est de trouver toutes les occurrences "<?=
" avec ack. Comment puis je faire ça?ack-grep: caractères échappés
ack "<?="
Ne fonctionne pas. S'il vous plaît dites-moi comment puis-je réparer échapper ici?
Puisque ack
utilise des expressions régulières Perl, votre problème provient du fait que dans le langage Perl RegEx, ?
est un caractère spécial signifiant "la dernière correspondance est optionnelle". Donc, ce que vous cherchez est =
précédé par un <
Donc vous devez échapper le ?
si c'est juste destiné à être un caractère régulier.
Pour échapper, il existe deux approches - soit <\?=
ou <[?]=
; certaines personnes trouvent que la seconde forme d'échappement (mettre un caractère spécial dans une classe de caractères) est plus lisible que l'échappement par antislash.
MISE À JOUR Comme Josh Kelley a gracieusement ajouté dans le commentaire, une troisième forme d'échapper est d'utiliser l'opérateur \Q
qui échappe à tous les caractères spéciaux suivants jusqu'à ce \E
se rencontre, comme suit: \Q<?=\E
ack "<\?="
? est un opérateur regex, donc il doit s'échapper
Plutôt que d'essayer pour se souvenir quels caractères doivent être échappés, vous pouvez utiliser -Q pour citer tout ce qui doit être cité.
ack -Q "<?="
Ceci est la meilleure solution si vous voulez trouver par le texte simple.
(si vous devez trouvez pas par expression régulière.)
Ou utilisez '\ Q = \ E' pour échapper les caractères spéciaux ALL. –
Ou utilisez l'option -Q pour échapper tous les caractères spéciaux, aussi, car vraiment, qui veut jouer avec la merde \ Q \ E? –