Próbuję wyszukać ciąg 0.49
(z kropką) za pomocą polecenia
grep -r "0.49" *
Ale to, co się dzieje jest to, że ja też dostaję niechciane rezultaty, które zawiera ciąg znaków, takich jak 0449
, 0949
etc ,. Rzecz w tym, że linux traktuje kropkę (.) Jako dowolny znak i przynosi wszystkie wyniki. Ale chcę uzyskać wynik tylko dla „0.49”.
\\.
to zadziałało. Używam Zsh.\\.
do uderzenia lub"\."
ucieczki z powłoki.grep -F -r '0.49' *
traktuje 0,49 jako „stały” ciąg zamiast wyrażenia regularnego. To sprawia, że.
traci swoje specjalne znaczenie.źródło
Musisz uciec
.
jak"0\.49"
.A
.
to metaznak wyrażenia regularnego pasujący do dowolnego znaku (oprócz nowej linii). Aby dopasować literalny okres, musisz go uciec.źródło
Po prostu uciec
.
grep -r "0\.49"
źródło
Możesz także użyć "[.]"
źródło
Jest tu tak wiele odpowiedzi sugerujących ucieczkę od kropki,
\.
ale ciągle napotykałem ten problem:\.
daje mi ten sam wynik co.
Jednak te dwa wyrażenia działają dla mnie:
I:
Używam „normalnej” powłoki bash na Ubuntu i Archlinux.
Edytuj lub, zgodnie z komentarzami:
Zauważ, że pojedyncze cytaty robią różnicę tutaj.
źródło
grep '\.'
lubgrep \\.
. ).Kropka ucieczki. Przykładowe polecenie będzie.
źródło
Możesz uciec przed kropką i innymi znakami specjalnymi, używając \
na przykład. grep -r "0 \ .49"
źródło
\.
otoczenie cytatami jest konieczne, aby działało.Możesz także wyszukiwać za pomocą opcji - opcja, która zasadniczo ignoruje wszystkie znaki specjalne i nie zostanie zinterpretowana przez grep.
źródło