정규표현식
프로그래밍/BASH SHELL2015. 1. 27. 10:03
반응형
2.1 정규표현식
2.1.1 정의와 용례
정규표현식 : 검색을 위해 사용되는 여러 문자들의 패턴.
2.1.2 정규표현식 메타문자
정규표현식 : 검색을 위해 사용되는 여러 문자들의 패턴.
2.1.2 정규표현식 메타문자
vi,ex,grep,egrep,sed,awk 등의 모든 버전에서 사용 가능.
메타문자 | 기 능 | 사용 예 | 사용 예 설명 |
^ | 행의 시작 지시자 | /^love/ | love로 시작하는 모든 행과 대응 |
$ | 행의 끝 지시자 | /love$/ | love로 끝나는 모든 행과 대응 |
. | 하나의 문자와 대응 | /l..e/ | l 다음에 두 글자가 나오고 e로 끝나는 문자열을 포함하는 행과 대응 |
* | 선행 문자와 같은 문자의 0개 혹은 임의 개수와 대응 | /*love/ | 임의 개수의 공백 문자 후에 love로 끝나는 문자열을 포함한 행과 대응 |
[] | [] 사이의 문자 집합 중 하나와 대응 | /[Ll]ove/ | love나 Love를 포함하는 행과 대응 |
[x-y] | [] 사이의 문자범위내에의 한 문자와 대응 | [A-Z]ove/ | A부터 Z까지 한 문자가 ove로 끝나는 경우와 대응 |
[^ ] | 문자집합에 속하지 않는 한 문자와 대응 | /[^A-Z]/ | A와 Z 사이의 범위에 포함되지 않는 한 문자와 대응 |
메타문자로 사용하고 싶지 않은 경우 | /love./ | love가 마침표(.)로 끝나는 경우와 대응. 일반적으로 .는 임의의 한 문자를 의미 | |
< | 단어의 시작 지시자 | /<love/ | love로 시작하는 단어를 포함하는 행과 대응(vi,grep에서 지원) |
> | 단어의 끝 지시자 | /love>/ | love로 끝나는 단어를 포함하는 행과 대응(vi,grep에서 지원) |
(..) | 다음 사용을 위해 태그를 붙인다. | /(lov)able1er/ | 9개 태그를 쓸 수 있다. 왼쪽부터 순서대로 태그번호가 매겨진다. 예를 들어, 패턴 lov는 태크 1에 저장되고, 뒤에는 1로써 태그 값을 사용할 수 있다. 왼쪽 예제에서 검색 패턴은 lovable에 lover가 붙어 있는 문자열이 된다.(sed,vi,grep에서 사용 가능.) |
x{m} | 문자 x를 m번 반복한다. | o{5,10} | 문자 o가 5회에서 10회 사이의 횟수로 연속적으로 나타나는 문자열과 대응 |
x{m,}. | 적어도 m번 반복한다. | ||
x{m,n}. | n회 이하 m회 이상 반복한다. |
정규표현식 사용 예
사용 예 | 설 명 |
/love/ | 정규표현식은 love이다. 패턴 love는 자체로 검색 대상이 될 수도 있고, 또는 lovely,gloves,clover 등과 같이 다른 단어의 일부가 될 수도 있다. |
/^love/ | 여기서 ^는 행의 시작 지시자라 한다. vi는 love로 시작하는 행만 찾는다. 즉, love가 행의 첫 문자열이어야 한다. love 앞에 빈 칸이나 다른 문자가 오면 안 된다. |
/love$/ | $는 행의 끝 지시자라 한다. vi는 love로 끝나는 행만 찾는다. 즉, love가 행을 끝내는 단어의 제일 마지막 부분의 문자열이고, love가 끝나면 새로운 행이 시작되어야 한다. |
/l.ve/ | .는 개행문자를 제외한 어떤 문자와도 대응된다. vi는 l 다음에 임의의 한 문자가 나오고 ve가 뒤따르는 문자열을 찾는다. 예를 들어 love나 live를 찾는다. |
/o*ve/ | *는 0개를 포함한 임의 개수의 선행 문자와 대응된다. 즉, 어떤 문자 다음에 붙어 나와서 그 문자에 대해서만 제어를 담당한다. 따라서 o와 ve 사이에 o가 한 번도 오지 않을 수도 있고 여러번 올 수도 있다 . 예를 들어, love,loooove,lve 등을 찾아 준다. |
/[Ll]ove/ | []는 괄호 안의 문자들 중의 하나와 일치하면 찾는다. vi는 ove 앞에 대문자 L이나 소문자 l이 오는 단어들을 찾아준다. |
/ove[a-z]/ | ove 다음에 아스키코드 상에서 a와 z 사이의 문자가 오는 문자열을 찾아준다. 문자 범위는 아스키 코드를 사용하기 때문에 [z-a]처럼 나타낼 수는 없다. |
/ove[^a-zA-Z0-9]/ | []안의 ^는 부정을 의미하는 메타문자이다. ove 다음에 a와 z, A와 Z 및 0과 9 사이에 오지 않는 문자를 가진 문자열을 찾는다. 예를 들어, ove 다음에 쉼표,스페이스,마침표 등 지정된 범위 밖의 문자들이 나오는 문자열을 찾는다. |
:1,$s/tom/David/g | 첫 번째 행에서 파일의 끝까지 나와 있는 모든 tom을 찾아 David로 바꿔라. |
:1,$s/<[Tt]om>/David/g | 첫 번째 행에서 파일의 끝까지 나와 있는 모든 tom 이나 Tom을 찾아 David로 바꿔라. s: 치환하라. g: 치환이 전 범위에서 일어나게 하라. |
2.2 정규표현식 메타문자의 조합
사용 예
사용 예 | 설 명 |
/^[A-Z]..$/ | 행의 처음에 대문자가 하나 나오고, 다음에 임의의 두 문자가 나오며, 연이어 개행문자가 오는 문자열을 찾는다. |
/^[A-Z][a-z ]*3[0-5]/ | 행의 처음에 대문자가 하나 나오고, 소문자나 스페이스가 0번 또는 여러번 반복되며, 이어서 3이 나오고, 마지막으로 0과 5 사이의 숫자가 오는 문자열을 찾는다. |
/[a-z]*./ | 임의의 소문자가 0번 또는 여러번 이어지다가 마침표로 끝나는 문자열을 찾는다. |
/^ *[A-Z][a-z][a-z]$/ | 행의 처음에 공백문자(탭은 공백문자로 취급되지 않는다)가 0번 또는 여러번 나오고, 이어서 대문자 하나와 두 개의 소문자가 그리고 마지막으로 개행문자가 오는 문자열을 찾는다. |
/^[A-Za-z]*[^,][A-Za-z]*$/ | 행의 처음에 대문자나 소문자 하나가 0번 또는 여러번 나오다가 쉼표가 아닌 문자가 오며, 이어서 다시 대문자나 소문자 하나가 0번 또는 여러번 나오다가 마지막으로 개행문자가 오는 문자열을 찾는다. |
반응형
'프로그래밍 > BASH SHELL' 카테고리의 다른 글
bash 프롬프트 howto (0) | 2015.01.27 |
---|---|
grep 계열 명령어 (0) | 2015.01.27 |
쉘 문법 (0) | 2015.01.27 |
정규식 이해 (0) | 2015.01.27 |
쉘 명령 기초 (0) | 2015.01.27 |
댓글()