Programming
No. | 111 | ||||||||
Name. | swindler | ||||||||
Subject. | 정규표현식 (Regular Expressions) 강좌 #2 | ||||||||
Main Cate. | 개발일반 | ||||||||
Sub Cate. | |||||||||
Date. | 2004-11-30 15:26 | ||||||||
Hit. | 7659 (211.219.39.230) | ||||||||
File. | |||||||||
정규표현식누르고정규표현식 #2 < 단순 정규표현식과 확장 정규표현식 > 정규표현식은 단순 정규표현식과 확장 정규표현식으로 나눌 수 있는데, 이는 특정한 프로그램(awk,egrep)에서는 몇가지의 확장된 기능을 제공하기 때문이다.펄의 경우에는 더 다양한 정규표현식을 제공한다. 일반적으로 단순 정규표현식으로만으로도 충분하며, 특별히 awk, egrep을 사용할 때에만 확장 정규표현ㄴ식을 이용한다고 생각하면 된다. 일반적으로 vi나 grep을 많이 사용하므로, 확장 정규표현식은 강의하지 않기로정규표현식 #2 < 단순 정규표현식과 확장 정규표현식 > 정규표현식은 단순 정규표현식과 확장 정규표현식으로 나눌 수 있는데, 이는 특정한 프로그램(awk,egrep)에서는 몇가지의 확장된 기능을 제공하기 때문이다.펄의 경우에는 더 다양한 정규표현식을 제공한다. 일반적으로 단순 정규표현식으로만으로도 충분하며, 특별히 awk, egrep을 사용할 때에만 확장 정규표현식을 이용한다고 생각하면 된다. 일반적으로 vi나 grep을 많이 사용하므로, 확장 정규표현식은 강의하지 않기로 하겠다. (swindler: 내 맘이다.) < 치환 모드에서 이용되는 정규표현식 > 지금까지 살펴본 것은 모두 파일에서 특정한 문자열을 찾아낼 때 사용할 수 있는 정규표현식들이었다. 여기서 부가적으로 ed, ex, sed등이 지원하는 문자열 치환시에 사용할 수 잇는 몇 가지 정규표현식 문법에 대해서 살펴보자. (vi에디터에서 Esc를 누르고 :키를 누르면 ex모드로 진입하게 된다.) 이제부터는 거의 vi에 맞추어서 설명해 나가겠다. 먼저, 간단하게 파일 안의 clock을 모두 click으로 바꾸는 방법은 다음과 같다. :%s/clock/click/g (vi에서 Esc를 누르고 : 누른 다음에 %s부터 입력하면 된다.) %는 파일 전체를 의미하는 특수 문자이며, 마지막의 /g의 의미는 같은 라인에 대해서, clock이 여러개 있을 때에도 작동하도록 하기 위한 것이다. 치환 작업을 할 때 치환 범위를 정해주어야 한다. 만약 3번째부터 30번째 줄까지 동일한 작업을 할려면 :3,30s/clock/click/g를 해야 한다. 10번째 줄부터 마지막까지 할려면, :10,$s/clock/click/g를 해야 한다. 1. \n (\1, \2. \3...) \숫자는 \로 둘러싸인 정규표현식 일부분을 대치하여 포현한다. 다음 예를 보자. :%s\(bar\)\(foo\)/\2\1/g 이와 같이 실행하면 barfoo로 되어 있는 것 전부를 foobar로 바꾸어준다. \2는 foo를 뜻하며, \1은 bar를 뜻한다. 2. & 대치할 정규표현식 전부를 의미한다. 다음 예를 보자. :%s/nux/li&/g 이는 nux를 linux로 바꾸어 준다. 여기서 &는 nux를 의미한다. 치환 작업을 할 때 치환 범위를 정해주어야 한다. 만약 3번째부터 30번째 줄까지 동일한 작업을 할려면 :3,30s/clock/click/g를 해야 한다. 10번째 줄부터 마지막까지 할려면, :10,$s/clock/click/g를 해야 한다. 1. \n (\1, \2. \3...) \숫자는 \로 둘러싸인 정규표현식 일부분을 대치하여 포현한다. 다음 예를 보자. :%s\(bar\)\(foo\)/\2\1/g 이와 같이 실행하면 barfoo로 되어 있는 것 전부를 foobar로 바꾸어준다. \2는 foo를 뜻하며, \1은 bar를 뜻한다. 2. & 대치할 정규표현식 전부를 의미한다. 다음 예를 보자. :%s/nux/li&/g 이는 nux를 linux로 바꾸어 준다. 여기서 &는 nux를 의미한다. 3. ~ 이는 &와 반대의 역할을 한다. :%s/windog/Linux/g 라고 하면 windog가 전부 Linux로 바뀌게 된다. 그 다음에 :%s/WINdog/~/g 라고 하면, WINdog도 Linux로 바뀌게 된다. 여기서 ~는 Linux를 의미하게 된다. 4. \u, \U, \l , \L \u는 대치할 정규표현식의 첫 번째 문자를 대문자로 바꾸어주고, \U는 정규표현식 전체를 대문자로 바꾼다. \l은 대치할 정규표현식의 첫 번째 문자를 소문자로 바꾸어주고, \L은 대치할 정규표현식 전체를 소문자로 바꾼다. :%s/LINUX/\l&/g : 파일 전체에서 LINUX를 lINUX로 바꾼다. :%s/linux/\u&/g : 파일 전체에서 linux를 Linux로 바꾼다. 5. 리눅스 팁 (도스용 파일을 유닉스용으로 바꾸기) 이는 전에도 한번 한 적이 있는 내용이지만, 한번 더 하기로 한다. 가끔 도스에서 가져온 단순 텍스트 화일이 유닉스에서 보면 줄 끝에 ^M이 붙어있는 경우가 있다. 이런 현상은 유닉스와 도스의 파일 처리 형식이 다르기 때문이며, 반대로 유닉스용 파일을 도스용으로 가져가면, 전부 한 줄로 붙어 있는 현상이 생기게 한다. 이것은 리눅스의 경우 리턴키를 눌렀을때, LineFeed를 뜻하는 '0x0a'가 파일에 입력되는데 비해 도스에서는 리턴키가 LineFeed와 Carriage Return의 두 바이트가 입력되기 때문이다. 따라서, 같은 내용의 파일이라도 리턴키의 갯수만큼 도스용 파일의 크기가 더 크게 된다. 도스측에서 유닉스용 파일을 제대로 보기 위해서는 윈도 95에 있는 메모장(노트패드)를 이용하지 말고 워드패드등을 이용하면 된다. 반대로, 유닉스에서 도스용 파일에서 ^M을 제거할려면 다음과 같이 해야 한다. 먼저 vi editor에서는 :%s/^M// (여기서 ^M은 Ctrl키를 누른 상태에서 v와 M을 순서대로 누르면 된다.) Perl을 이용하는 방법은 perl -pi -e 's/\r//' filename mcopy를 이용하는 방법 mcopy -t a:/foobar.c . [바로가기 링크] : http://coolx.net/cboard/develop/111 |
|||||||||
|
|||||||||
[Modify] [Delete] | [Reply] [List] |