私の目標は<?=
、ack で出現するすべての " " を見つけることです。どうやってやるの?
ack "<?="
うまくいきません。ここでエスケープを修正する方法を教えてください。
Perl正規表現を使用しているため、問題は、Perl RegEx言語では、「最終一致はオプション」を意味する特殊文字であるack
という事実に起因します。?
したがって、あなたが探しているものの=
前には、オプションがあります<
?
したがって、それが通常のキャラクターであることが意図されている場合は、エスケープする必要があります。
脱出するために、2つのアプローチがあります-<\?=
または<[?]=
; 一部の人々は、エスケープの2番目の形式(特殊文字を文字クラスに入れる)がバックスラッシュエスケープよりも読みやすいと感じています。
更新JoshKelleyがコメントに丁寧に追加したように、エスケープの3番目の形式は、次のように、検出される\Q
まで次のすべての特殊文字をエスケープする演算子を使用することです。\E
\Q<?=\E
どの文字をエスケープする必要があるかを覚えようとするのではなく、 -Q を使用して、引用する必要があるすべてを引用することができます。
ack -Q "<?="
単純なテキストで検索する場合は、これが最適なソリューションです。
(正規表現で探す必要がない場合)
ack "<\?="
?は正規表現演算子であるため、エスケープする必要があります