본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스 유닉스] 정규표현식 (Regular Expression) 메타문자 정리. vi편집기에서 정규표현식 응용해 검색하기

[리눅스 / 유닉스 목차]

 

안녕하세요! 

지난 포스팅들에서는 정말 기본적인 vi 단축키에 대해서 알아봤는데요.

 

이번에는 알아두면 정말정말 유용한 vi 에디터 사용법 2편으로 찾아왔습니다. 검색에다가 정규표현식을 더해서 원하는 결과값을 뽑도록 하는거죠! 정규표현식 메타문자에 대해 정리를 하고 이를 응용해서 사용을 해보도록 하겠습니다.

 

기초적인 vi 편집기 사용법이 궁금하신 분들은 아래 링크를 참조해주세요!

▼ [리눅스, 유닉스]vi (vim) 편집기 기본 사용법, 명령어, 단축키, 동작법 & 문제

 

[리눅스, 유닉스]vi (vim) 편집기 기본 사용법, 명령어, 단축키, 동작법 & 문제

[리눅스 / 유닉스 / 셸 프로그래밍 완전 정복 목차 바로가기 ] 가장 많이 사용되고, 꼭 알아야 하는 ~ vi 편집기 사용하기 vi는 다른 편집기들과는 다르게 모드형 편집기라는 특징이 있습니다. (명령 모드, 입력..

jhnyang.tistory.com

vi 편집기 블락 범위 복사, 주석 블럭 처리, 범위 삭제, 비주얼 블럭 모드 사용법

 

[리눅스 Linux] vi 편집기 블락 범위 복사, 주석 블럭 처리, 범위 삭제, 비주얼 블럭 모드, 복붙 norm

[ 리눅스 Linux, 유닉스 Unix 포스팅 링크 모음 ] 안녕하세요~!! 저번 시간 vi 편집기의 아주 기초 사용법에 이어서 오늘 vi편집기에서 자주 사용하게 될 블락 복사 기능에 대해서 간단하고 빠르게~ 다뤄볼게요..

jhnyang.tistory.com

정규표현식 메타 문자 알아보자.

C든, 자바든, 리눅스든, 펄이든,,, 어느 언어든 자주 쓰이는 정규식 표현법에 대해서 먼저 정리하고 가도록 합시다. 정규표현식은 여러 종류가 있지만, 거의 비슷합니다. 그리고 정규표현식은 문자열을 다룰 때 가장 유용하고 없어서는 안되는 문법(?)이기도 하죠. 대부분의 프로그래밍 언어에서 지원하는 만큼 정말 잘 사용되니까 숙지해놓으면 유용합니다.

 

메타 문자는 특정한 문자 혹은 문자 계열을 대신해서 표시하는 문자를 말해요 

즉 숫자만~ 문자만~ 이런 특정 의미를 나타낼 수 있는 하나의 심볼이죠.

vi 편집기에서 실행하면서 바로바로 확인해보는게 이해가 편해요. 

그 전에 기억해야할 점!! 지난 포스팅에서 배웠듯 검색은 '/'로 하면 됩니다. 

메타 문자

1. [  ] 

 

대괄호 사이에 존재하는 문자들 중 하나에 일치합니다.

만약 대괄호 사이에 '-'가 들어가면 범위를 나타내요. (2번에서 다룰게요)

 

예시) [Ll]ove ▶love도 해당되고 Love도 해당된다. (L또는 l)

자, Love와 love가 잘 뽑히는 것을 확인할 수 있어요.

 

2. [x-y]

 

[ ]사이 범위 내의 한 문자와 대응합니다.

예시) [a-x]ove ▶ aove, bove, cove, dove, eove..... zove

잘 보면, love뿐만 아니라 hove, oove 등도 같이 검색된 것을 확인할 수 있어요.

 

3. ^ 

 

시작을 나타냅니다. 그런데 대괄호 사이에 들어가면 부정이 됩니다. ^문자 이후에 존재하는 문자들을 제외한 모든 문자와 일치합니다. 

예시) ^love ▶ love로 시작하는 모든 문자열

vi편집기에서 문자열은 마지막 end of line으로 구분하기 때문에 엔터까지 한 행이 문자열이라 생각하면 됩니다.

love로 시작하는 행은 3행밖에 없네요!

[^A-Z]ove ▶ A와 Z사이의 범위에 포함되지 않는 한 문자와 대응 3ove, aove, bove #ove 등등..

^[a-zA-Z] ▶ 영문자로 시작하는 문자열 

 

 4. $ 

 

끝을 나타냅니다. '단어$'가 되면 '단어'로 끝나는 문자열을 찾는거죠

예시) love$ ▶ love로 끝나는 문자열

해당 예시에서는 6번째 라인이 love로 끝나는 것을 확인할 수 있어요.

 

5.  . (점)

 

하나의 문자와 대응하는 표현으로 모든 문자와 일치합니다. 단일행 모드에서는 새줄문자 (new line)을 제외한 모든 문자를 말해요.

 예시) l..e ▶ l 다음에 두 글자가 나오고 e로 끝나는 문자열 love, lade, lone, 등등...

보시면 love뿐만 아니라 live도 선택된 것을 확인할 수 있어요.

 

6.  * 

 

앞의 문자를 0개 이상 찾습니다.

예시) ' *love' (*love앞에 공백 하나 있음)

임의 개수의 공백 문자 후에 love로 끝나는 문자열 (0개 이상이라 공백이 없을 수도 있음!)

보시면 이렇게 공백포함love또 뽑히고 그냥 love도 뽑힙니다.

 

7.  ? 

 

앞의 문자가 0번 또는 1개 발생하는 걸 찾습니다. 앞에 *는 앞의 문자가 복수개가 나와도 됐다면 ?는 무조건 한개 아니면 빵입니다. ( 해당 메타문자는 grep에서는 지원안되고 egrep에서 지원되는 확장형입니다. 이 외에도 확장형이 많은데.. 일단 *와 매핑되는 부분이 있어 알아두면 좋을 거 같아 낑겨넣음)

예시) https? http, https, httpsss, htthttp, httphttps

 

 

8. \

 

메타문자로 사용하고 싶지 않은 경우 앞에 \를 붙여준다.

예시) love\.

▶ love가 마침표로 끝나는 경우와 대응합니다. (일반적으로 .(점)은한 문자를 의미 5번에서 다뤘었음!)

 

 

 

9. \<, \>

 

\<는 단어의 시작 지시자, \>는 단어의 끝 지시자입니다.. 즉 \<love\>하면 love로 시작하고 끝나는 단어들만 뽑는거!! 그러므로 gloves와 같이 중간에 love가 끼어져 있는 검색들은 다 제거해주죠. 시작지시자만 쓸 수도 있고 끝지시자만 쓸 수도 있고, 둘 다 같이쓰면 단어만 뽑는 그런게 되겠죠?

love만 딱 뽑혔어요. 보시면 파란색 밑줄은 love가 있음에도 불구하고 선택이 안된것을 확인할 수 있습니다.

 

10. \{m\}

 

{m}의 앞 문자가 정확히 n개 있음을 나타냅니다. 

예시) o\{2\} ▶ o가 2개 있음 

 

 

11. \{m,\}

 

10번과 똑같아 보이지만 뒤에 ,(컴마)가 붙었어요. 이렇게 컴마가 붙으면 최소를 의미하게 됩니다. 최소 m번 반복한다.

즉 위와같은 예시를 사용해보자면

예시) o\{2,\}   o가 최소 두번 이상 나오는 부분을 찾겠죠?

 

12. \{m,n\}

 

이번에는 컴마 뒤에 최대값 지정이 됐어요. 이럴 경우 m회 이상, n회 이하 반복되는 부분을 찾는 것이라는걸 쉽게 유추하실 수 있어요!

 

13. \(..\)

 

이게 은근 중요한대요. 다음 사용을 위해 태그를 붙이는 역할을 합니다.

약간 잠깐 레지스터에 넣었다가 쓸 수 있는 느낌이랄까.

\(lov\)하면 lov를 태그 붙여놓은거예요. 순서대로 1번부터 매겨집니다. 

나중에 내가 \1이렇게 하면 태그 값(lov)를 사용할 수 있어요.

예시) \(lov\)able\1er ▶lovablelover  왜 이렇게 됐냐, lov + able + 태그1값 + er 인데, 태그1 내용은 lov이기 때문입니다. 

메타문자 활용, EXAMPLES

이러한 메타문자들은 검색뿐만 아니라 치환할때도 굉장히 유리해요! 

살짝 예시를 들고 넘어가자면 치환할 때

:s/변경할꺼/변경될꺼/

대략적으로 이련 명령어를 많이 쓰는데 만약 banana를 apple로 변경하고 싶다 그러면

:s/banana/apple/

이렇게 쓰겠죠. 근데 이렇게 하면 banana는 잘 apple로 변경이 되는데 Banana는 변경이 잘 안될거예요. 

그럼 메타문자를 활용해서 

:s/[bB]anana/apple/

이렇게 하면 banana도 변경이 되고 Banana도 변경 대상이 되겠죠! 

 

아무튼 결론은 정규식을 눈에 많이 익혀놓자는거~ 

 

요기 grep 명령어 관련 포스팅에도 grep 예시를 많이 적어두었어요! grep도 정규메타를 지원하는 만큼 같이 익혀두면 좋겠죠?!

▼텍스트 필터 명령어1(문자열 패턴 검색 grep 옵션, 정규표현식)

https://jhnyang.tistory.com/67

 

[리눅스]텍스트 필터 명령어1(문자열 패턴 검색 grep 옵션, 정규표현식)

[리눅스 Linux] 리눅스 완전 정복 : 리눅스 목차 FILTER 필터링! 많이 들어보셨죠? 욕을 필터링한다고 하면 욕을 걸러준다는 거고 정수기 필터,,, 에어콘 필터,, 실생활에서도 필터링은 많이 사용되서 뜻은 아실..

jhnyang.tistory.com

오늘은 정규표현식에 대해 알아봤어요. 고생하셨습니다.

도움이 되셨다면 공감으로 마음을 표현해주시는 것은 어떤지요?! 

다음 포스팅에서 또 만나욤 ~