22

私の目標は<?=、ack で出現するすべての " " を見つけることです。どうやってやるの?

ack "<?="

うまくいきません。ここでエスケープを修正する方法を教えてください。

4

4 に答える 4

29

Perl正規表現を使用しているため、問題は、Perl RegEx言語では、「最終一致はオプション」を意味する特殊文字であるackという事実に起因します。?したがって、あなたが探しているものの=前には、オプションがあります<

?したがって、それが通常のキャラクターであることが意図されている場合は、エスケープする必要があります。

脱出するために、2つのアプローチがあります-<\?=または<[?]=; 一部の人々は、エスケープの2番目の形式(特殊文字を文字クラスに入れる)がバックスラッシュエスケープよりも読みやすいと感じています。

更新JoshKelleyがコメントに丁寧に追加したように、エスケープの3番目の形式は、次のように、検出される\Qまで次のすべての特殊文字をエスケープする演算子を使用することです。\E\Q<?=\E

于 2010-06-19T02:52:30.630 に答える
20

どの文字をエスケープする必要があるかを覚えようとするのではなく、 -Q を使用して、引用する必要があるすべてを引用することができます。

于 2010-06-19T04:51:03.503 に答える
14
ack -Q "<?="

単純なテキストで検索する場合は、これが最適なソリューションです。

(正規表現で探す必要がない場合)

于 2015-01-30T02:52:29.030 に答える
8
ack "<\?="

?は正規表現演算子であるため、エスケープする必要があります

于 2010-06-19T02:51:53.850 に答える