4,564,679 th visitor since 2017.2.1 ( Today : 220 )
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



swindler 영문자 사이의 '만 \'로 바꾸는 경우 아래와 같이 처리
%s/\([a-z]\)'\([a-z]\)/\1\\'\2/g
2008-08-12
swindler 첫번째 나타나는 것은 최소일차 non-greedy match 라고 표현하고 vi 에서는 \{-} 로 표현한다.
즉, 첫번째 나타나는 : 의 경우 ^.\{-} 와 같이 표현
2014-08-25
Name
Password
Comment
Copyright © 1999-2017, swindler. All rights reserved. 367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)

  2HLAB   2HLAB_Blog   RedToolBox   Omil   Omil_Blog