리터럴 문자열을위한 Grep


101

순전히 리터럴 문자열을 검색하는 grep 유형 도구를 찾고 있습니다. 별도의 로그 파일에서 한 줄의 일부로 로그 파일 줄의 발생을 찾고 있습니다. 검색 텍스트에는 모든 종류의 정규식 특수 문자 (예 : []().*^$-\.

정규식을 사용하지 않고 문자열의 리터럴 항목 만 검색하는 유닉스 검색 유틸리티가 있습니까?


원더 왜 문제가 아니었다 "내가 만들 수 grep리터럴 문자열을 검색?" 대신 " grep리터럴 문자열을 검색 할 수 있는 것이 있습니까?" 납작 머리 스크루 드라이버는 필립스 나사 머리에 맞을 수 있습니다.;)
ADTC

답변:


136

-F 옵션과 함께 grep을 사용할 수 있습니다.

-F, --fixed-strings       PATTERN is a set of newline-separated fixed strings

"줄 바꿈으로 구분 된 고정 문자열" 터미널 프롬프트에서 어떻게 할 수 있습니까? 패턴 파일을 만들 수 있다는 것을 알고 있지만 파일 없이도 프롬프트에서 할 수 있습니까? Enter 키를 누르면 분명히 명령이 실행됩니다.
ADTC

13
내 질문에 답하겠습니다. :)-e 옵션의 반복을 사용하여 여러 고정 문자열을 제공하면 됩니다. 이렇게 : grep -F -e "fixed1" -e "fixed2" -e "fixed3" -e "fixed4". 개행 필요 없음;)
ADTC

2
Solaris에서는 사용할 수 없습니다. 대신 fgrep사용됩니다.
majkinetor

2
@ADTC 특수 문자 만 포함하는 검색된 문자열에 작은 따옴표를 사용해야한다는 것을 알았습니다. 그렇지 않으면 아무것도 찾을 수 없습니다. 따라서 이것은 어떤 결과도 반환하지 않았습니다. grep --include=\*.php -FRn -e "$$"단일 쿼트를 사용하여 원하는 결과를 얻었습니다.grep --include=\*.php -FRn -e '$$'
Piemol

2
당신은 이다 올바른 @ADTC. $그리고 몇 가지 다른 문자는 특별하며 Enter 키를 누른 후 grep(또는 어떤 명령이든) 실행 되기 전에 bash로 대체됩니다 . 모든 문자 (작은 따옴표 제외)를 작은 따옴표로 묶어 그대로 두도록 bash에 지시 할 수 있습니다. 당신이 따옴표를 입력해야하는 경우 다음과 같이 그것을'I'\''m special'
ndemou

14

그것은 fgrep또는 grep -F정규식을 수행하지 않을 것입니다. fgrep동일 grep -F하지만 본질적으로 게으른 인수에 대해 걱정할 필요가 없습니다. :-)

grep   ->  grep
fgrep  ->  grep -F  (fixed)
egrep  ->  grep -E  (extended)
rgrep  ->  grep -r  (recursive, on platforms that support it).

GNU grep의 경우 fgrep은 grep에 대한 심볼릭 링크로 제공되므로 -F
Daenyth

3
egrep그리고 fgrepPOSIX 표준에 의해 지정되지 않은; grep -F그리고 grep -E 있습니다
리차드 한센


3

awk를 사용할 수도 있습니다. 고정 된 문자열을 찾을 수있을뿐만 아니라 프로그래밍 기능도 있습니다.

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file

2
cat list.txt
one:hello:world
two:2:nothello

three:3:kudos

grep --color=always -F"hello

three" list.txt

산출

one:hello:world
three:3:kudos

2
동의하지 않습니다. 이것이 어떻게 작동하는지에 대한 유용한 그림입니다.
timwaagh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.