2010-04-29 3 views
3

fgrep -ircl --include=*.{sql} "[--]" * 트릭을 수행하지 않는 것 같습니다. 도와주세요 ...대시 '-'를 어떻게 FGREP 할 수 있습니까?

답장을 보내 주셔서 감사합니다. 나는 '-'를 '#'로 대체하려고 노력하고 있으며 힘든 시간을 보내고 있습니다. 여기에 new question을 만들었습니다. 당신이 도울 수 있다면, 그것은 굉장했습니다.

+5

fgrep! = 빠른 grep – meagar

+0

나는 동의하고 동의하지 않습니다. grep보다 더 좋은 성능을 보여줍니다. 그리고 fgrep도 fast-grep을 의미합니다! – ThinkCode

+0

아니요, 그렇지 않습니다. 'fgrep '은 fast-grep을 뜻합니다. 사실'fgrep '은 고정 문자열 grep을 의미하며'grep'보다 성능이 향상되지 않습니다. http://ss64.com/bash/fgrep.html (또는> man fgrep) –

답변

1

대괄호 안에 대시 문자를 이스케이프 처리해야합니다. 대시 문자는 문자 클래스 내의 범위를 나타내는 데 사용됩니다 (예 : [a-z]). 그러나이 경우 대괄호를 사용하여 리터럴 문자열을 일치시킬 필요가 없습니다.

마지막으로 --argument parsing을 중지시키는 speical 시퀀스입니다. 인수로 리터럴 --를 포함하려면, 당신은 명시 적으로 인수 구문 분석을 중지해야합니다 다음 (단일) - 문자와 일치하는 정규 표현식 문자 클래스처럼 보이는

fgrep -ircl --include=*.{sql} -- -- * 
+0

문자 클래스 안에서 벗어나는 것은 의미를 바꾸지 않을 것입니다. –

4

합니다. 문자열 --는 일반적으로 "더 이상 매개 변수에 따라 없습니다"표시하는 데 사용됩니다, 그래서 아마 당신은 당신이 검색 할 실제 문자열 뒤에 "매개 변수의 끝"입니다

fgrep -ircl --include=*.{sql} -- -- * 

을 시도해야합니다.

+0

이상하게도 충분히 --include = *. {sql} .. 어떤 아이디어도없이 작동합니까? – ThinkCode

+0

@NJTechie'--include'를 생략하면 현재 디렉토리의 모든 파일/서브 디렉토리가 인수로 전달되므로 검색됩니다. 이것이 마지막'*'이하는 것입니다 - 현재 디렉토리의 모든 파일과 일치합니다. – meagar

1

대시 문자는 [a-z] 또는 [0-9] 범위를 나타 내기 때문에 대괄호 [] 안의 첫 번째 위치에만있을 수 있습니다. 당신은 [-] [-] 할 수 있습니다. 작은 따옴표 '[--]' 대신 "[--]"

fgrep -ircl --include=*.{sql} '[--]' * 
+0

그들은 또한 마지막 일 수 있습니다. :) –

+0

그냥 grep [-] [-]를 사용하지만 fgrep과 함께 작동하지 않습니다. ( – ThinkCode

+0

@calmh - 나는 그것을 고마워했습니다. –

0

시도는 .sql로 끝나는 모든 파일을 fgrep 할 경우

fgrep -ircl --include=*.sql -- -- * 

를 사용하거나 ({sql,}에서 쉼표주의 :

fgrep -ircl --include=*.{sql,} -- -- * 

원하는 경우 오 fgrep 확장 하나 개 이상의 유형이 다음 다른 사람이 이미 언급 한 바와 같이

fgrep -ircl --include=*.{sql,txt} -- -- * 

같은 것을 사용하는 첫 번째 --는 플래그와 옵션을 찾고 중지 fgrep를 알려줍니다. 두 번째 --은 고정 문자열 패턴입니다.

관련 문제