13.grep 명령어 실습

#.데이터 검색과 가공, 처리 

 

1.regcomp : regcomp을 통하여 정규식(특정한 규칙을 갖는 문자열)을 정의. regcomp() 함수가 성공하면, 0을 리턴합니다.

그렇지 않으면 regerror() 함수에 대한 호출에서 사용할 수 있는 오류 코드를 리턴하며 preg의 컨텐츠가 정의되지 않습니다.

 

2.regexec : regexec를 통하여 입력된 값이 정규식에 포함되었는지를 확인하고 매칭 정보를 리턴. regexec() 함수는 컴파일된 정규식 preg에 대해 널로 끝나는 string을 비교하여 두 사이의 일치 항목을 찾습니다. 일치 항목을 찾으면 regexec() 함수는 0을 리턴합니다. 일치 항목을 찾지 못하면 regexec() 함수는 REG_NOMATCH를 리턴합니다. 그렇지 않으면 오류를 나타내는 0(영)이 아닌 값을 리턴합니다. 0(영)이 아닌 리턴값은 regerror() 함수에 대한 호출에서 사용될 수 있습니다.

 

3.regerror : regerror는 regcomp와 regexec가 실패할 경우 실패이유를 string으로 변환.

 

4.regfree : regfree는 사용을 다한 정규식 리소스를 반환.

 

 

함수설명

 #.int regcomp(regex_t *preg, const char *regex, int cflags)

 

설명: regexec() 함수에서 사용가능한 형식으로 패턴을 컴파일 해준다.

preg 포인터의 경우 컴파일된 regular 형식의 저장소를 가지고 있다. 간단하게 말하면 저 포인터에 정규식 매칭하는 값들이 저장되어 있다. 즉, regcomp 정규식 컴파일 하면, 입력 값으로 넣었던 preg 포인터에 정규식이 저장되는 것이다.

 

 #.int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags)

 설명: 컴파일된 정규식 형식을 가지고 주어진 문자열에서 정규식에 해당하는 값을 찾는다.

 

 #.관련 flag 값 

        REG_EXTENDED : 확장 정규식을 지원합니다.

           

        REG_ICASE : 일치 항목에서 대소문자를 무시합니다.

 

        REG_NOSUB : pattern에 지정된 하위 식의 수를 무시합니다. 컴파일된 패턴과 스트링을 비교하면 (regexec() 사용), 스트링은 전체 패턴과 일치해야 합니다. regexec() 함수는 일치 항목을 찾은 경우에만 표시하는 값을 리턴합니다. 일치 항목이 시작되는 위치 또는 일치하는 스트링이 있는 위치를 표시하지 않습니다.

 

        REG_NEWLINE : 줄 바꾸기 문자를 특수 줄의 끝 문자로 처리합니다. 그런 다음 ] 및 $ 패턴으로 일치되는 행 경계를 설정하며 \n을 사용하여 명백하게 스트링 내에서만 일치될 수 있습니다. (이 플래그를 생략하면 줄 바꾸기 문자는 다른 문자처럼 처리됩니다.)

 

 

예제

결과

 

 

예제파일

test3.zip
0.00MB

 

 

#.homework

1.grep 명령어에 있는 -I 옵션과 -v 옵션을 이 장에서 작성한 grep 명령어에 추가한다.

 

2.정규표현식에 해당하는 줄 전체를 출력하는 것이 아니라, 해당 문자열만을 출력하는 명령어 slice를 작성하라.

이를 위해서는 regexec()의 세번째 인자와 네번째 인자를 사용해야한다.

 

 

 

 

#.grep 명령어에 있는 -I 옵션과 -v 옵션을 이 장에서 작성한 grep 명령어에 추가한다.

풀이

결과