grep을 사용하여 점이있는 문자열 검색


196

0.49명령을 사용하여 문자열 (점 포함) 을 검색하려고합니다.

grep -r "0.49" *

그러나 일어나는 것은 나 또한 같은 문자열을 포함하는 원치 않는 결과를 얻고 있다는 것입니다가 0449, 0949등 ,. 리눅스는 dot (.)을 어떤 문자로 간주하고 모든 결과를 이끌어냅니다. 그러나 "0.49"에 대해서만 결과를 얻고 싶습니다.

답변:


238

grep정규식을 사용합니다. .정규식에서 "모든 문자"를 의미합니다. 당신은 리터럴 문자열을 원하는 사용하는 경우 grep -F, fgrep또는 탈출 .\..

문자열을 큰 따옴표로 묶는 것을 잊지 마십시오. 그렇지 않으면 사용해야합니다\\.

따라서 귀하의 명령은 다음과 같아야합니다.

grep -r "0\.49" *

또는

grep -r 0\\.49 *

또는

grep -Fr 0.49 *

58
나는 \\.그것이 작동 하기 위해 두 번 탈출 해야했습니다. zsh를 사용하고 있습니다.
Nikos Renieris

5
@NikosRenieris 그 리핑 문자열을 큰 따옴표로 묶었습니까?
Justus Romijn

@JustusRomijn 예, 생각합니다.
Nikos Renieris

15
당신은 사용해야합니다 \\.너무 떠들썩한 파티를 위해, 또는 사용하는 "\."쉘에서 탈출.
Tomofumi

36

grep -F -r '0.49' *0.49를 정규식 대신 "고정"문자열로 취급합니다. 이것은 .특별한 의미 를 잃게 만듭니다 .


22

.as 를 탈출해야합니다 "0\.49".

A .는 모든 문자와 일치하는 정규식 메타 문자입니다 (줄 바꿈 제외). 리터럴 기간을 일치 시키려면 이스케이프해야합니다.



5

"[.]"를 사용할 수도 있습니다.

grep -r "0[.]49"

5

거기에 점을 탈출 제안 여기 이렇게 많은 답변이 \.있지만, 나는 또 다시이 문제에 실행 된 것은 : \.나에게 동일한 결과를 제공.

그러나이 두 표현은 저에게 효과적입니다.

$ grep -r 0\\.49 *

과:

$ grep -r 0[.]49 *

우분투와 Archlinux에서 "일반"bash 쉘을 사용하고 있습니다.

의견에 따라 편집 하거나

$ grep -r '0\.49' *

1, 참고 단일 -quotes 여기의 차이 일입니다.


3
쉘에서 정규 표현식을 인용하거나 백 슬래시 자체를 피하여 쉘이 소비하지 않도록해야합니다. grep '\.'또는 grep \\.(나는 원래의 질문에서와 같이 전자를 강력하게 권장합니다. 큰 따옴표도 작동하지만 작은 따옴표는 이해하고 사용하기가 더 쉽습니다. 예를 들어 큰 따옴표의 경우 여전히 일부 시나리오에서 백 슬래시를 두 배로 늘려야합니다 ).
tripleee

IMHO, 이것은 가장 명확한 정답이며 @tripleee의 의견과 함께 가장 완벽합니다. [] (단일 문자와 일치하는 문자의 하위 집합을 나타내는 기능)를 사용하는 것은 좋은 해킹입니다.
jringoot

@jringoot 진심으로? 나는 이것이 분명하지 않다고 생각한다-인용에 익숙하지 않은 누군가의 후속 질문처럼 보인다.
tripleee

두 표현식이 직접 작동하고 실제로 많은 다른 사람들이 인용을 가정하거나 이중으로 이스케이프해야 쉘이 사소한 것으로 해석하지 않기 때문에 분명합니다. 댓글을 더 이상 변경할 수 없습니다 (5 분 제한). 내 의견이 더 나을지도 모른다. "@tripleee의 의견과 결합하면 가장 완전한 답이다. 두 명령이 즉시 작동하고 인용이 완료
되었으므로

1
내가 일반적으로 권장하는 것은 "항상 정규 표현식을 작은 따옴표로 묶는 것"입니다. "완전한"것은 아니지만 작업이 완료되며 인용을 이해하거나이 간단한 규칙에 따라 살아야한다는 것을 의미합니다.
tripleee


4

\를 사용하여 점 및 기타 특수 문자를 이스케이프 처리 할 수 ​​있습니다

예. grep -r "0 \ .49"


장래 독자에게 상기시켜 주려면 \.인용 부호로 묶어야합니다.
과일

1

기본적으로 모든 특수 문자를 무시하고 grep으로 해석되지 않는-옵션으로 검색 할 수도 있습니다.

$ cat foo |grep -- "0\.49"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.