정규표현식, Regular Expression

  • REGEX, RE
  • 가장 중요한 REGEX의 변형
    • POSIX REGEX - UNIX 정규표현식
      • BRE - Basic REGEX, grep이 작동하는 기본값
      • ERE - Extended REGEX, 좀 더 많은 표현식과 편의성
    • PCRE - Perl 정규표현식 호환으로, 확장된 기능을 가진다.
      • 현재는 PCRE2
  • EBNF - Extended Backus-Naur Form
    • REGEX는 EBNF의 영향을 많이 받았다.
    • EBNF는 필수로 알아야 한다.

String pattern

  • 문자열이 조합되는 규칙
    • e-mail은 중간에 @가, 오른쪽에 .이, 왼쪽에는 계정명이 등장한다.

meta character

  • 다른 의미를 수식하는 문자, 예약어
  • 문자 지정 - .
  • 반복 지정 - ? + * {m,n}
  • 위치 지정 - ^ $
  • 그룹 지정 - […] [^…]
  • 기타 - \ | ( )

문자 지정

.

  • c . bc1b, c2b, c3b
  • c .. bc12b, c23b, c34b
$ var3='abc cab cbb ccb zxy cdb c1b c2b c.b c*b 123'
$ echo $var3 | grep --color 'c.b'
# 결과는?

$ echo $var3 | grep --color 'c\.b' # \는 .의 예약어 기능을 취소한다.
# 결과는?

반복 지정

  • Quantifier, 수량자
  • X?ML → XML or ML, ?앞의 문자가 0개 혹은 1개 존재. ERE, 실제 사용은 \?
  • can* → ca, can, cann, cannn…, *앞 문자가 0개 이상 존재. BRE
  • can+ → can, cann, cannn…, +앞 문자가 1개 이상 존재. ERE, 실제 사용은 \+
  • http.*.* 뒤에 어떤 문자던 붙을 수 있다. ERE
  • abc{2,5}{2,5}앞의 문자가 2개 이상, 5개 이하 존재.
    • {0, } = *, { ,1} = ?, {1, } = +

위치 지정

  • ^ftpftp로 시작하는 행
  • ^$ → 비어있는 행
  • <BR>$<BR>로 끝나는 경우

그룹 지정

  • Character sets
  • [a,b,c,d]a, b, c, d 중 하나
  • [0-9]0~9 range 지정
  • [a-zA-Z0-9] → 대소문자 알파벳과 숫자
    • 왜 이렇게 잘랐냐? → 아스키 코드값이 기준이라
  • [^0-9][0-9]를 제외한 나머지
    • ^ 문자 자체를 그룹에 넣으려면?
      • 뒤에 붙여주자. [0-9^]

grep

  • Global Regular Expression Print
  • grep 실행시 matcher 고르기
grep -G # default, BRE 사용
grep -E # ERE 사용
grep -P # PCRE 사용 
  • grep 주요 옵션
grep --color # matching에 성공한 부분을 색칠

grep -o # matching에 성공한 부분만 잘라줌

grep -v # invert, matching에 실패한 부분만 잘라 줌
grep --invert-match
  • egrep
  • fgrep

심화

sed - Stream Editor로, REGEX기능을 일부 탑재

awk - 패턴식을 다루는 언어 tool, 가장 많은 기능

profile
올해로 26세

0개의 댓글