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