Ack szukaj dosłownych ciągów znaków [zamknięte]

15

Mam dość ucieczki, gdy chcę wyszukać część tagu HTML.

Jak mogę wyszukać dokładnie to, co wpisuję, bez konieczności ucieczki?

na przykład

ack-grep 'console.log(foo'

Dostaję:

Unmatched ( in regex; marked by <-- HERE in m/console.log( <-- HERE par/
próbnik
źródło
Używasz innej powłoki? Umieścić w cudzysłowie? Umieść szukany ciąg w pliku, podejrzewam, że ack-grep może pobrać ciąg z pliku. Być może możesz nawet wyszukać za pomocą standardowego wejścia.
Zoredache
@Zoredache Dodałem lepszy przykład .. Nie chcę uciekać (.. a co rozumiesz przez lepszą powłokę?
tester
Mam na myśli, że wszystkie znaki, na które narzekasz, są obsługiwane przez twoją powłokę (bash / zsh / cokolwiek). Problem nie ma nic wspólnego z narzędziem. Problem polega na tym, że powłoka nie wysyła tego, co piszesz.
Zoredache
Ach, myślę, że go znalazłem .. -Q używa go dosłownie ..
tester

Odpowiedzi:

18

Musisz uciec od wyrażenia regularnego.

ack 'console\.log\(foo'

(Powinieneś uciec przed ., aby nie pasować do „Consoleflog”, ponieważ .pasuje do dowolnego pojedynczego znaku)

A jeśli wolisz tego nie robić, zrób to, aby automatycznie cytować każdy metaznak.

ack -Q 'console.log(foo'
Andy Lester
źródło
2
\ Q nie działa na moim serwerze. ack '\Qconsole.log(foo' ack: Invalid regex '\Qconsole.log(foo': Unmatched ( in regex; marked by <-- HERE in m/\Qconsole.log( <-- HERE foo/
Sébastien
Myliłem się co do \Qprzykładu i usunąłem go z odpowiedzi. Dzięki, @ Sébastien.
Andy Lester