이번 포스팅에서는 리눅스 정규 표현식 (Linux Regular Expression)에 대해서 알아보겠습니다.
정규 표현식은 데이터 검색, 복잡한 패턴 매칭을 도와주는 특별한 문자입니다. 정규표현식(regular expression)은 줄여서 'regexp' 또는 'regex' 라고도 합니다.
정규 표현식은 리눅스 뿐만 아니라 유닉스, SQL, R, Python 등 에서도 사용할 수 있습니다. 지난번 포스팅에서 소개했던 grep 문과 함께 사용하면 정말로 강력하게 문자열 패턴 매칭, 검색을 할 수가 있습니다.
정규 표현식(Regular expressions)에 대해서 모르는 상태에서 다른 사람이 짜놓은 정규 표현식을 처음으로 보게 되면 '에잉? 이게 뭐지? 갓난 아기가 컴퓨터 자판를 가지고 마구잡이로 장난하면서 두둘겨 놓은건가?' 이런 생각이 들겁니다. 알면 해독이 되는데요, 모르면 도통 이게 뭐에 쓰는 물건인가, 이게 프로그래밍 언어 맞나 싶게 요상하게 보이거든요. ^^; 암튼, 알아두면 문자열 패턴 매칭, 검색 시 정말 유용합니다.
정규 표현식에는 3가지 유형이 있습니다.
- 기본 정규 표현식 (Basic Regular Expressions)
- 간격 정규 표현식 (Interval Regular Expressions)
- 확장 정규 표현식 (Extended Regular Expression)
다음은 예제로 사용할 텍스트 문서입니다.
[MacBook-Pro:Documents rfriend$ cat mylove.txt drum photography data science greenplum python R book movie dancing singing milk english gangnam style new face soccer pingpong sleeping martial art jogging blogging apple grape banana tomato bibimbab kimchi 123_abc_d4e5 xyz123_abc_d4e5 123_abc_d4e5.xyz xyz123_abc_d4e5.xyz
|
먼저 기본 정규 표현식 (Basic Regular Expressions)을 예를 들어서 살펴보겠습니다.
정규표현식은 큰 따옴표(" ")안에 매칭할 문자와 함께 사용합니다.
1. 문자열의 처음 시작 부분 매칭: ^
참고로 -n 은 행번호를 출력하라는 뜻입니다.
[MacBook-Pro:Documents rfriend$ grep -n "^m" mylove.txt 8:movie 11:milk 18:martial art
|
2. 문자열의 끝 부분 매칭: $
[MacBook-Pro:Documents rfriend$ grep -n "m$" mylove.txt 1:drum 4:greenplum
|
3. 점의 개수만큼 아무 문자나 대체: ...
[MacBook-Pro:Documents rfriend$ grep -n "m..." mylove.txt 8:movie 11:milk 13:gangnam style 18:martial art 24:tomato 25:bibimbab 26:kimchi [MacBook-Pro:Documents rfriend$ grep -n "m......" mylove.txt 13:gangnam style 18:martial art [MacBook-Pro:Documents rfriend$ grep -n "..m..." mylove.txt 13:gangnam style 24:tomato 25:bibimbab 26:kimchi [MacBook-Pro:Documents rfriend$ grep -n "....m" mylove.txt 4:greenplum 13:gangnam style 25:bibimbab
|
4. * 부호 앞의 문자와 여러개 매칭 : *
[MacBook-Pro:Documents rfriend$ grep "app*" mylove.txt photography apple grape [MacBook-Pro:Documents rfriend$ grep "^app" mylove.txt apple
|
5. 특수 문자와 매칭: \
[MacBook-Pro:Documents rfriend$ grep "\@" mylove.txt
|
6. a나 b로 시작하는 모든 행을 찾아서 출력 : ^[ab]
[MacBook-Pro:Documents rfriend$ grep "^[ab]" mylove.txt book blogging apple banana bibimbab
|
7. 0~9 사이 숫자로 시작하는 단어 : ^[0-9]
[MacBook-Pro:Documents rfriend$ grep ^[0-9] mylove.txt 123_abc_d4e5 123_abc_d4e5.xyz
|
8. x~z 사이 알파벳으로 끝나는 단어 : [a-e]$
[MacBook-Pro:Documents rfriend$ grep [x-z]$ mylove.txt photography 123_abc_d4e5.xyz xyz123_abc_d4e5.xyz
|
다음의 예는 간격 정규 표현식(Interval Regular Expressions) 입니다.
간격 정규 표현식은 문자열 안에서 특정 문자가 몇 번 출현 했는지를 가지고 패턴 매칭할 때 사용합니다.
9. 앞의 문자와 'n'번 정확하게 매칭: {n}
grep -E "character"\{n} 의 형식으로 사용합니다.
[MacBook-Pro:Documents rfriend$ grep "g" mylove.txt photography greenplum dancing singing english gangnam style pingpong sleeping jogging blogging grape [MacBook-Pro:Documents rfriend$ grep -E "g"\{2} mylove.txt jogging blogging
|
마지막으로, 확장 정규 표현식(Extended Regular Expressions) 입니다. 확장 정규 표현식은 한 개 이상의 표현식(combinations of more than one expressions)을 결합하여 사용할 수 있게 해줍니다.
10. \+ 앞의 문자가 한번 이상 출현한 문자열과 매칭: \+
[MacBook-Pro:Documents rfriend$ grep "k" mylove.txt book milk kimchi -- 문자 'k'의 앞에 'o'가 출현한 문자열만 선별하고 싶은 경우 "o\+k" 정규표현식 사용 [MacBook-Pro:Documents rfriend$ grep "o\+k" mylove.txt book
|
* Reference : https://www.guru99.com/linux-regular-expressions.html
많은 도움이 되었기를 바랍니다.
'Greenplum and PostgreSQL Database' 카테고리의 다른 글
[Greenplum DB] Greenplum DB, MADlib, PL/R, PL/Python을 Docker Image를 이용하여 환경구성 하기 (0) | 2018.08.13 |
---|---|
[Greenplum DB] Greenplum DB에 MADlib, PL/R, PL/Python 설치한 Docker Image 만들어서 Docker Hub에 올리기 (0) | 2018.08.13 |
[Greenplum DB] 세계 최초 오픈소스 대용량 데이터 병렬 처리 데이터 분석 플랫폼, Greenplum Database (GPDB) (3) | 2018.08.08 |
Linux grep command: 리눅스 문자열 패턴 검색하여 출력 (0) | 2018.07.31 |
Linux Shell Script 기본 사용법 (0) | 2018.07.29 |