출처 : http://kldp.org/~kabin/doc/regexpress.htm
언제 정규식을 사용하게 되는가?
=============================
여러분은 보통 다음과 같은 경험을 한 적이 있을 것이다.
. vi 에디터에서 편집중인 파일 내의 모든 특정 문자열을 또 다른 특정
문자열로 바꾸고 싶은 경우
. ls 명령을 통해 보다 명확한 파일이름을 주고 싶은 경우
. grep 명령을 통해 특정한 문자열을 포함한 파일을 가려 내는 경우 등.
예를 들어 vi 에디터에서 편집중인 내용중에 'body'라는 문자열을 'Body'
로 바꾸고자 할 경우 우리는 다음과 같은 방법을 사용한다.
:%s/body/Body/g
위의 명령을 사용할때 정규식을 이용하면 보다 세밀한 지정을 할 수 있다.
예를 들어 다음과 같이 하면 라인의 처음에 나타나는 'body'에 대해서만
'Body'로 교체할 수도 있다.
:%s/^body/Body/g => 여기서 ^는 라인의 시작을 의미한다.
그리고 다음과 같이 하면 한 라인에 오직 'body'만을 포함한 라인일 경우
'body'를 'Body'로 교체하게 된다.
:%s/^body$/Body/g => 여기서 $는 라인의 끝을 뜻한다.
또한 다음과 같이 하면
:%s/[a-z]ddy/Body/g
'addy' 또는 'bddy' 또는 'cddy', 'dddy', 'eddy', ... , 'zddy' 등의 파일을
'Body'로 교체하게 된다.
위의 예에서 ^ 나 [] 그리고 $ 등과 같은 정규식에 사용되는 문자를
메타문자라고 한다.
이러한 문자에는 다음과 같은 것들이 있다.
\ ^ $ . [ ] | ( ) * + ?
여러 프로그램들에서의 메타문자및 패턴 지원
=========================================
1. 여러 프로그램에서의 메타문자 지원 여부
문자 ed ex vi sed awk grep egrep 매치
---------------------------------------------------------------------
. * * * * * * * 모든 한개의 문자
* * * * * * * * 0개부터 몇개이상의 문자
^ * * * * * * * 시작
$ * * * * * * * 끝
\ * * * * * * * escape
[] * * * * * * * 그룹으로부터 하나를 선택
\( \) * * * 나중을 위해 패턴을 저장
\{ \} * * * 요소의 범위 매칭
\< \> * * * 워드의 앞 또는 뒤와 매치
+ * * 하나 또는 그이상의 앞매치
? * * 0또는 그 이상의 앞매치
| * * 구분 선택 매치
() * * 매치될 그룹표현
--------------------------------------------------------------------
출처: 유닉스 파워툴 오렐리
2. 여러 프로그램에서의 대치 패턴 지원 여부
===============
문자 ex sed ed action
--------------------------------------------------------------------
\ * * * Escape
\n * * * \( \)에서 사용된 패턴 재사용
& * * 이전 찾기패턴의 재사용
- * 이전 교체패턴의 재사용
\u \U * 문자(들)을 대문자료 교체
\l \L * 문자(들)을 소문자료 교체
\E * 이전 \U나 \u를 끈다.
\e * 이전 \u나 \l를 끈다.
--------------------------------------------------------------------
출처: 유닉스 파워툴 오렐리
패턴매칭 빠른 참조
=================
1. 찾기 패턴
패턴 설명
-----------------------------------------------------------------------
. 어떤 하나의 문자와도 매치가 이루어진다.
* 어떤 갯수의 문자와도 매치가 이루어 진다. 여기에는 문자가 하나도
없을 수도 있고 아주 많을 수도 있다.
^ 문자가 라인의 처음에서 시작함을 뜻한다.
$ 문자가 라인의 끝에 있음을 뜻한다.
[ ] 안에 들어 있는 하나의 문자와 매치가 이루어 진다.
하이픈(-)은 문자의 범위를 나타내게 되는데 예를 들어 [a-z]라고
표현함은 a에서 z까지의 문자를 뜻한다.
\{n,m\} 앞서 나오는 문자의 반복 횟수를 뜻한다. 만약 0\{1,2\}라고 표현
되어 있다면 이것은 0이 1에서 2번 반복 한다는 뜻이다.
또한 이것은 \{n\} 나 \{n,\}로 표현 될 수도 있는데, 전자는 n번
반복됨을 뜻하며, 후자는 n번 이상 반복 함을 뜻한다.
\ 특수 문자의 성격을 희석 시켜주는 escape sequence다.
\( \) \(와 \)안에 들어 있는 패턴을 저장해 준다. 이것은 나중에 교체를
위한 용도로 \1이나 \9처럼 사용된다. 총 9개까지 저장이 가능하다.
\< \> 워드의 앞(\<)또는 뒤(\>)와 매치하기 위해 사용된다.
+ 앞서는 정규식의 하나 이상의 요소와 매치된다.
? 앞서는 정규식의 0개 또는 그 이상의 요소와 매치된다.
| 전 후 매치 정규식 표현
( ) 그룹화된 정규식 매치
------------------------------------------------------------------
2. 교체 패턴
패턴 설명
------------------------------------------------------------------
\ 특수문자의 의미를 희석
\n \( \)로 저장된 패턴의 n번째를 가져옴
& 교체패턴의 부분으로 사용된 찾기패턴을 재사용함
~ 이전에 사용된 교체패턴을 현재의 교체패턴에서 재사용함
\u 교체패턴의 첫번째 문자를 대문자료 변환
\U 교체패턴의 모든 문자를 대문자로 변환
\l 교체패턴의 첫번째 문자를 소문자로 변환
\L 교체패턴의 모든 문자를 소문자로 변환
------------------------------------------------------------------
찾기 패턴 예
===========
1. 일반 패턴
패턴 설명
-------------------------------------------------------------------
fly 문자 fly
^fly 라인의 처음에서 시작하는 문자 fly
fly$ 라인의 끝에서 끝나는 문자 fly
^fly$ 라인에 fly문자만 있는 경우
[Ff]ly Fly또는 fly
f[abc]y fay또는 fby, fcy
f[^ab]y fay, fby 이외의 fcy, fdy, 등등..
f.y 가운데 문자는 어떠한 것이 와도 상관 없다.
^...$ 한 라인에 문자 셋만 오는 경우
^\. 처음에 문자 '.'가 오는 라인
^\.[a-z][a-z] 위와 같은데 다만, 이어서 두개의 소문자가 온다.
^\.[a-z]\{2\} 위와 같다.(grep이나 sed에서만)
^[^.] .로 시작하지 않는 라인
fly* flya, flysds, flyss 등등
"fly" quote가 있는 fly
"*fly"* quote가 있거나 또는 없는 fly
[A-Z][A-Z]* 하나 또는 그 이상의 대문자
[A-Z]+ 위와 같다.(다만 egrep과 awk에서만)
[A-Z].* 0개 혹은 그이상의 문자가 오는 하나의 대문자
[a-zA-Z] 어떠한 문자도 가능(영문)
[^0-9A-Za-Z] 특수문자만 매치가능
[567] 5또는 6또는 7가운데 하나.
-----------------------------------------------------------------
2. egrep또는 awk 패턴
패턴 설명
------------------------------------------------------------------
flive|six|seven five또는 six또는 seven중의 하나
80[23]?86 8086, 80286, 80386 중의 하나
compan(y|ies) company또는 companies
------------------------------------------------------------------
3. ex 또는 vi 패턴
패턴 설명
------------------------------------------------------------------
\<the theater 또는 the 등
the\> breath 또는 the 등
\<the\> 단어 the
------------------------------------------------------------------
4. sed 또는 grep 패턴
패턴 설명
------------------------------------------------------------------
0\{5,\} 한 라인에 0이 5개 이상 있는 것.
[0-9]\{3\}-[0-9]\{2\}-[0-9]\{4\} 123-45-6789같은 순의 숫자
즉 숫자가 세개 온 다음에 하이픈 그리고
숫자가 두개 온 다음에 하이픈 그리고
숫자가 네개 온다.
------------------------------------------------------------------
원본출처: 유닉스파워툴 오렐리
번역편집: 안창선
교체 패턴 예
===========
명령 결과
--------------------------------------------------------------------
s/.*/( & )/ 전체라인에 대해 재실행, 그러나 괄호를 추가한다.
s/.*/mv & &.old 워드 리스트를 mv명령으로 변경한다.
/^$/d 블랭크 라인을 삭제한다.
:g/^$/d 위와 같으나 ex버전의 명령이다.
/^[ tab]*$/d tab문자 앞은 공백문자라고 봤을때, 라인이 블랭크 라인
뿐만 아니라 스페이스나 tab문자가 있는 경우도 삭제
:g/^[ tab]*$/d 위와 같으나 ex버전의 명령
s/ */ /g 하나 이상의 스페이스 문자를 하나의 스페이스로 바꾼다.
:%s/ */ /g 위와 같으나 ex버전의 명령
:s/[0-9]/Item &:/ 숫자를 아이템 레이블로 교체한다.
교체결과는 Item 1: 등과 같은 형식이 된다.
:s 처음 시도된 교체를 한번 반복
:& 같다.
:sg 처음 시도된 교체를 모든 발생되는 것에 대해 적용
:&g 같다.
:%&g 교체를 전체에 적용
:.,$s/Fortran/\U&/g 현재 라인부터 끝까지 워드를 대문자로 바꾼다.
:%s/.*/\L&/ 전체 파일을 소문자로 교체한다.
:s/.*/\u&/g 현재라인의 단어 첫자를 대문자료 교체한다.
:%s/yes/No/g 전체라인에서 yes를 No로 바꾼다.
:%s/Yes/~/g 전체라인에서 Yes를 전체 교체한 것으로 바꾼다.
전에 한것이 :%s/yes/No/g라면 No로 바뀔 것이다.
s/die or do/do or die/ 단어를 바꾼다.
s/\([Dd]ie\) or \([Dd]o\)/\2 or \1/ \( \)를 이용해 버퍼를 사용하여
문자를 바꿈
---------------------------------------------------------------------
원본출처: 유닉스 파워툴 오렐리
편집 및 번역: 안창선
Window Programming