Mein Ziel ist es, alle "<?=
" Vorkommen mit ack zu finden. Wie kann ich das machen?ack-grep: Zeichen entkommen
ack "<?="
Funktioniert nicht. Bitte sag mir, wie kann ich hier Abhilfe schaffen?
Mein Ziel ist es, alle "<?=
" Vorkommen mit ack zu finden. Wie kann ich das machen?ack-grep: Zeichen entkommen
ack "<?="
Funktioniert nicht. Bitte sag mir, wie kann ich hier Abhilfe schaffen?
Da ack
reguläre Ausdrücke Perl verwendet, stammt Ihr Problem von der Tatsache, dass in Perl RegEx Sprache, ?
ist ein Sonderzeichen bedeutet "letzte Übereinstimmung ist optional". Also, was Sie grepping für ist =
von einem optionalen <
vorangestellt, so müssen Sie die ?
zu entkommen, wenn das nur ein reguläres Zeichen sein soll.
Um zu entkommen, gibt es zwei Ansätze - entweder <\?=
oder <[?]=
; Manche Leute finden die zweite Form der Flucht (ein Sonderzeichen in eine Zeichenklasse einfügen) besser lesbar als Backslash-Escape.
UPDATE Als Josh Kelley gnädig im Kommentar hinzugefügt, ist eine dritte Form der Flucht aus dem \Q
Operator zu verwenden, die alle folgenden Sonderzeichen entkommt bis \E
angetroffen wird, wie folgt: \Q<?=\E
ack "<\?="
? ist ein Regex-Operator, also muss es entkommen
Anstatt zu versuchen, Um sich zu erinnern, welche Zeichen maskiert werden müssen, können Sie -Q verwenden, um alles zu zitieren, was zitiert werden muss.
ack -Q "<?="
Dies ist die beste Lösung, wenn Sie durch einfachen Text finden möchten.
(wenn Sie nicht von regulären Ausdruck finden müssen.)
oder benutzen '\ Q = \ E' auf alle Sonderzeichen zu entkommen. –
Oder nutzen Sie die Option -Q, um auch alle Sonderzeichen zu umgehen, denn wirklich, wer will sich mit dem \ Q \ E Mist anlegen? –