2013-12-20 2 views
-1

리눅스 시스템에서 특정 문자열 변형을 포함하는 디렉토리의 모든 파일을 나열하기 위해 grep을 수행하려고합니다. 이 파일은 저장 프로시 듀어의 DDL이며 DECIMAL (x, 2) 또는 NUMERIC (x, 2)의 정밀도가 2 인 NUMERIC 또는 DECIMAL 선언이있는 모든 파일을 찾고 있습니다. 대소 문자를 구분하지 않으며 공백은 무시됩니다.grep SQL 숫자 데이터 유형으로 검색

예 :

DECIMAL(13,2) 
DECIMAL(13, 2) 
DECIMAL(13, 2) 
Decimal(13 , 2) 
DECIMAL  (13, 2 ) 
NUMERIC(13   , 2) 
numeric (13 , 2) 
NUMERIC(8,2  ) 
CAST(INT (PURCHASE_DATE) AS NUMERIC(8,0)) AS BUYDATE; 

나는 지금까지 마련입니다했습니다 무엇 :

grep --include='*.DDL' -inP 'sproc' -e '.*Numeric|Decimal *\(*[0-9] *\, *2 *\).*' 

그러나 물론, 자사가 작동하지 내가 간단하게 이유를 누락

. 어떤 도움이라도 대단히 감사하겠습니다.

+0

작동하지 않는 기능은 무엇입니까? 출력이 보이지 않거나 예상 한 결과가 아닌가? 오류가 있습니까? – SethMMorton

+0

문제가 해결되면 대답을 수락하십시오. [대답을 받아들이는 방법은 무엇입니까?] (http://meta.stackexchange.com/a/5235/192546) – givanse

답변

0

나는이 같은 검색을 수행 할 것입니다 : 당신의 예와 일치합니다

(([Dd][Ee][Cc][Ii][Mm][Aa][Ll])|([Nn][Uu][Mm][Ee][Rr][Ii][Cc]))\s*\(\s*\d+\s*,\s*\d{1,2}\s*\) 

및 :

grep --include='*.DDL' -inRP 'REGEX' * 

이 정규식을

숫자를 (1, 3)

DeCiMaL (2, 12)

이 일치하지 않음 :

진수 (1, 123)

진수 (2, 1 2) 당신이 경우

당신은 -e 플래그가 필요하지 않습니다 이미 -P을 사용 중입니다. 또한 검색 할 경로를 지정해야합니다. 서브 폴더가있는 경우에 대비하여 *을 사용하고 -R 플래그를 추가했습니다.

grep --include='*.DDL' -inP -e '.*Numeric|Decimal\ *\(\ *[0-9]\ *\,\ *2\ *\).*' 

내가 개인적으로 선호 :

+0

-i 플래그를 사용하면'[Nn] [Uu] [Mm ] [Ee] [Rr] [Ii] [Cc]' –

1

당신이 -P을 사용하고 있기 때문에, 각 공간

grep --include='*.DDL' -inP -e '.*Numeric|Decimal[ ]*\([ ]*[0-9][ ]*\,[ ]*2[ ]*\).*' 

또는

grep --include='*.DDL' -inP -e '.*Numeric|Decimal\s*\(\s*[0-9]\s*\,\s*2\s*\).*' 

또는 대한 caracter 클래스, 또는 작품 Scapes을 사용한다 첫번째 것, 그것은 나에게 더 명백하게 보인다.

-i은 검색 케이스를 구분하지 않습니다.

+0

''sproc''은 무엇을합니까? – givanse

+0

아무 것도 없습니다. 실수라고 생각합니다. 제거하겠습니다. – Rafareino