강좌 & 팁
글 수 2,412
2010.12.27 03:07:29 (*.138.143.120)
49046
어떤분이 sed 를 이용한 문자열치환을 예를 드셔서 참고로 몇가지 기본적인 메타문자를 알아 봅니다.
. 점 임의의 한개 문자
[ ] 문자 클래스 목록에 있는 문자 중 하나
[^ ] 부정 문자 클래스 목록에 없는 문자 중 하나
^ 캐럿 행이 시작하는 위치
$ 달러 행이 끝나는 위치
\< 백슬래시< 단어가 시작하는 위치
>\ >백슬래시 단어가 끝나는 위치
| 또는, 수직막대(bar) 수직 막대로 구분된 각 표현식중 하나에 매치됨
( ) 괄호 | 의 영역을 제한함
[^ ] 부정 문자 클래스 목록에 없는 문자 중 하나
^ 캐럿 행이 시작하는 위치
$ 달러 행이 끝나는 위치
\< 백슬래시< 단어가 시작하는 위치
>\ >백슬래시 단어가 끝나는 위치
| 또는, 수직막대(bar) 수직 막대로 구분된 각 표현식중 하나에 매치됨
( ) 괄호 | 의 영역을 제한함
검색시에 위의 옵션을 섞어서 검색하면 아주 편리합니다.
옵션아이템... ?
활용도가 참 많은 녀석입니다.
문자뒤에 ? q을 붙인 경우 표현식에 들어가도 되고 들어가지 않아도 되는 항상 참인 경우
예를 들어 color 를 찾으려 할때 colour 과 함께 검색하고자 한다면
colou?r 과 같이 표현하면 ? 앞의 u 는 있어도 검색이 되고 없어도 참이 되어 동작한다.
즉 color r와 colour 이 모두 참이 되어 검색이 된다.
문자열로 묶는 것도 가능하다
4th|4 와 같이 한다면 4(th)? 와 같이 한다면
4 혹은 4th 를 모두 참으로 인식하게 된다.
+ 바로 앞의 아이템이 한번이상 반복
* 바로 앞의 아이템이 0번 이상 반복
이렇게 ?+* 세개의 메타 문자는 quantifier 라고 부른다.
활용도가 참 많은 녀석입니다.
문자뒤에 ? q을 붙인 경우 표현식에 들어가도 되고 들어가지 않아도 되는 항상 참인 경우
예를 들어 color 를 찾으려 할때 colour 과 함께 검색하고자 한다면
colou?r 과 같이 표현하면 ? 앞의 u 는 있어도 검색이 되고 없어도 참이 되어 동작한다.
즉 color r와 colour 이 모두 참이 되어 검색이 된다.
문자열로 묶는 것도 가능하다
4th|4 와 같이 한다면 4(th)? 와 같이 한다면
4 혹은 4th 를 모두 참으로 인식하게 된다.
+ 바로 앞의 아이템이 한번이상 반복
* 바로 앞의 아이템이 0번 이상 반복
이렇게 ?+* 세개의 메타 문자는 quantifier 라고 부른다.
이제 활용편...
이전분의 예제에서
#include "before/header.h"
#include "befre/header.h"
에서
#include "a.h"
이렇게 바꾸고 싶은데
오타난 놈도 있어서 그녀석도 같이 바꾸고 싶습니다.
이럴때는
sed -i 's/\#include \"befo\?re\/header.h\"/\#include \"a.h\"/g' a.c
와 같이 오타난 부분의 문자를 어떤것이든지 대치되도록 해주면 됩니다. 찹 쉽죠 잉?