ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규 표현을 사용한 텍스트 검색
    Technique/LPIC 2019. 5. 9. 15:17
    반응형

    정규 표현은 쉘의 메타 캐릭터와 같이 임의의 문자열 패턴을 찾기 위한 표기 방법이다. 정규 표현을 이용하는 것으로 파일 내의 문자열을 유연하고 강력하게 검색할 수 있다.

    정규 표현

    정규 표현 ( Regular Expression ) 은 특정한 조건을 나타내는 문자열을 추상적인 표현으로 나타내는 형식이다. 정규 표현은 파일 검색을 시작으로, 다양한 장소에서 이용할 수 있다. 검색을 할 경우 특정의 문자열에 완전 일치로 검색하는 것은 간단하다. 그러나 다음과 같은 것을 검색하고 싶을 경우에는 어떨까?

    - [a]로 시작하는 5 문자의 문자열로 2번째 문자는 3,5,7 중 어느 것 하나가 포함되어 있다.

    - 행의 마지막 문자가 [; ]이다

    - 선두에는 숫자로 시작하고 끝에는 알파벳 소문자로 끝난다

    이러한 문자열을 검색하고 싶을 경우에는 검색할 문자열의 조건을 정확히 표현할 필요가 있다. 그러기 위해 사용되는 방법이 정규 표현식이다. 정규 표현을 사용하면 다음의 문자열은 아래 왜 같이 작성한다

    - a[357]

    - ;$

    - ^[0-9].*[a-z]$

    문자

    정규 표현 중에 있는 문자는 문자 그 자체를 나타낸다. 예를 들어 [abc]는 문자열 [abc]를 그대로 나타낸다

    임의의 1 문자

    임의의 1 문자를 나타내기 위해선 [. (피리어드) ]를 사용한다 [ a.d ]는 [abcd]나 [al2d]를 나타낸다

    문자 클래스

    일련의 문자 집합을 나타내기 위해선 [ 와 ]로 감싼다. 이것이 문자 클래스이다. 예를 들어 [123]은 [1]. [2]. [3] 중 어느 것 하나를 나타낸다. 또한 c [au] t는 [cat] 또는 [cut]를 나타낸다.

    [-]을 사용하여 범위를 지정하는 것도 가능하다 a [5-7] b는 [a5b][a6b][a7b]중 하나가 매치된다

    [0-9]는 숫자를 [a-z]는 알파벳 소문자를 [A-Z]는 알파벳 대문자를 의미한다 [a-zA-Z]로 작성할 경우 대문자 소문자 관계없이 모든 알파벳 중 1 문자를 가리킨다. [^]가 선두에 위치할 경우 [~이외]을 의미한다 즉 [^abc]는 [a도 b도 c도 아닌 1문자 ]라는 의미를 가진다.

    행의 시작과 끝

    [^]는 앵두를 [$]는 행마를 의미한다. [^a]는 [a로 시작하는]을 의미한다. a$는 행의 마지막에 a를 의미한다 ^$는 [ 앵두와 해미 사이에 아무것도 없는 ]을 의미한다. 즉 공백형을 의미한다.

    반복

    직전의 문자의 0개 이상의 반복을 나태 느는 것은 *을 사용한다 ab*z는 [az][abz][abbz]등을 의미한다. 반복이 0회인 [az]도 매치되기 때문에 주의해야 한다.

    특수문자

    정규 표현에 사용되는 메타 문자를 문자로써 사용하고 싶을 경우 예를 들어 [*]를 반복의 의미가 아닌 단순한 아스타 리스크 문자로 사용하고 싶을 경우엔 문자의 앞에 [\(백슬래쉬)]를 두는 것으로 정규 표현의 의미를 없앨 수 있다. 예를 들어 a\*는 [a*]이라는 문자열 그 자체를 의미한다. 하지만 \가 유효한 것은 바로 뒤의 1 문자뿐이다.

    옵션 설명
    . 임의의 1문자
    * 직전의 문자가 0회이상 반복
    [] [] 안에 있는 문자 어느 1개라도 매칭
    - : 범위 지정
    ^ : 선두에 있을경우
    ~ : ~이외
    ^ 선두
    $ 행미
    \ 다음에 올 문자를 메타문자가 아니라 일반 문자열로 처리하도록 한다

    grep 커맨드

    grep 커맨드는 파일이나 텍스트 스트림의 안에 정규 표현에 의해 타나 나는 검색 문자열이 있는가 없는가 조사한다. 인수로 파일을 지정할 경우 그 파일의 안에 검색 패턴에 매치한 문자열이 포함하고 있는 행을 모두 표시한다. 파일은 복수 지정이 가능하다.

    옵션 설명
    -C 패턴이 매치된 행의 행번호만 출력한다.
    -f 검색 패턴을 파일로 읽어온다.
    -i 대문자 소문자 구분 없이 검색한다.
    -n 검색 결과와 함께 행 번호도 표시한다.
    -v 패턴이 매치하지 않은 행을 표시한다.
    -E 확장 정규 표현을 사용한다.

    확장 정규 표현을 사용하기 위해선 -E 옵션을 사용하거나 egrep 커맨드를 사용한다.

    메타 캐릭터 설명
    직전의 문자의 1회 이상 반복
    ? 직전의 문자의 0회 또는 1회 반복
    | 좌우 어딘가 하나가 매치할 경우

    검색 패턴에 정규 표현을 사용하지 않을 경우엔 fgrep을 사용한다.

    sed 커맨드

    Stream Editor는 텍스트 스트림에 대한 편집을 한다, sed에서는 편집할 내용을 커맨드나 스크립트로 sed에 지정해두고 sed는 그 기준에 일치하는 스트림의 편집을 하여 표준 출력으로 편집 결과를 표시한다.

    옵션 설명
    -f 커맨드가 쓰여 있는 스크립트 파일을 지정
    커맨드 설명
    d 매치된 행을 삭제
    s 패턴에 의거하여 치환한다, g 스위치를 사용할 경우 매치된 전체 부분을 치환한다.
    y 문자를 치환한다.

    최초의 서식에는 지정된 파일에 대하 커맨드를 적용한다. 파일이 지정되지 않은 경우에는 표준 입력으로부터 읽어 들인다. 다음의 서식에는 북수의 커맨드를 적용한다. 복수의 커맨드를 지정한 경우에는 -e 옵션을 커맨드마다 사용할 필요가 있다.

    최후의 서식에는 커맨드를 작성해둔 스크립트 파일을 지정한다. sed는 스크립트 파일을 읽어 들어 거기에 작성된 커맨드를 적용한다.

    sed에서는 커맨드가 처리하는 대상의 행을 지정하는 것이 가능하다. 예를 들어 6행부터 10행까지를 대상으로 하려면 커맨드의 직전에 [6,10]으로 작성한다. 마지막 행은 $로 나타낸다.

    반응형

    'Technique > LPIC' 카테고리의 다른 글

    기본적인 파일 관리  (0) 2019.05.14
    vi 에디터  (0) 2019.05.14
    텍스트 처리 필터  (0) 2019.05.09
    파이프와 리다이렉트  (0) 2019.05.08
    meta 문자 이용  (0) 2019.05.08

    댓글

Designed by Tistory.