728x90
반응형

리눅스에서 자주 사용하는 정규 표현식에 대해서 정리하려고 한다.
정규 표현식은 리눅스 뿐만 아니라 다양한 언어에서 사용되고 있다.

정규 표현식이란

"특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어"

라고 정의되어 있다.

굳이 정규 표현식을 알아야 하나 라는 궁금증이 생길 수도 있다.
사실 실무에서 굳이 정규 표현식을 사용하지 않아도 여러 명령어를 사용해 충분히 원하는 결과를 얻을 수 있다.
나도 마찬가지로 정규 표현식을 사용하기 보다 내가 알고 있는 명령어를 사용해 결과를 얻는 게 더 편했기 때문에 사용하지 않았던 것 같다.
하지만 정규 표현식을 사용하게 된다면 보다 쉽고 간단하게 원하는 결과를 얻을 수 있다는 장점이 있다.
물론 다 좋은 것 만은 아니다. 간결하게 표현하는 만큼 가독성이 떨어질 수 있고 아는 만큼 보이기 때문에
모르는 사람이 이해하기에는 다소 어려울 수 있다는 단점이 있다는 것을 알아야 한다.
아는 만큼 보이는 것이 정규 표현식이라고 할 정도로 알고 있다면 유용하게 사용할 수 있다고 생각한다.

그래서 적절한 상황에서 정규 표현식을 사용하게 되면 보다 편하고 간단하게 원하는 결과를 얻을 수 있다는 것을 알고 있기 때문에
정규 표현식에 대해서 간단한 것부터 하나씩 사용해보면서 이해해보려고 한다.


정규 표현식 정리 요약

^[문자] 문자열의 시작을 나타냄
[문자]$ 문자열의 종료를 나타냄
\d digit 의 약자, 숫자로만 이루어진 문자열
\D 숫자로 이루어지지 않은 문자열
. 사용하는 갯수만큼 임의의 문자를 나타냄
\w 알파벳 대소문자, 숫자, 언더바(_) 를 포함하는 문자열
\W 알파벳 대소문자, 숫자, 언더바(_) 외의 문자열
\s 공백 문자를 포함하는 문자열
\S 공백 문자를 포함하지 않는 문자열
\ 메타 문자(+,-,[,],@,#,$,^ 등) 를 그대로 나타냄
\n, \t 개행문자(\n), 탭(\t) 이 포함된 문자열

 

사용해보기 앞서 정규 표현식을 사용해보기 위한 example.txt 라는 간단한 텍스트 파일을 만들어보았다.
만든 텍스트 파일을 통해 grep 명령어와 함께 정규 표현식을 사용해보려고 한다.

$ cat example.txt    
Hello
world
Linux
shell
script
name
jaynam
@tistory.com
regular
expression
under_bar
space bar
tab	tab
123
456
789
49.24%
polky0421

 

문자열의 시작과 종료를 나타내는 표현식 : ^ , $

문자열의 시작은 ^ 문자를 사용해서 나타낼 수 있다.

예시1 ) j 로 시작하는 문자열

$ cat example.txt | grep "^j" 
jaynam

예시2 ) s 로 시작하는 문자열

$ cat example.txt | grep "^s"
shell
script
space bar

 

문자열의 종료는 $ 문자를 사용해서 나타낼 수 있다.

예시1 ) m 으로 종료되는 문자열

$ cat example.txt | grep "m$" 
jaynam
@tistory.com

 

숫자와 숫자가 아닌 문자열을 나타내는 표현식 : \d, \D

숫자를 포함하는 문자열과 숫자가 아닌 문자열을 확인할 때 표현식을 통해 확인할 수 있다.

예시1 ) 숫자를 포함하는 문자열

$ cat example.txt | grep "\d"
123
456
789
49.24%
polky0421

예시2 ) 숫자가 아닌 문자열

$ cat example.txt | grep "\D" 
Hello
world
Linux
shell
script
name
jaynam
@tistory.com
regular
expression
under_bar
space bar
tab	tab
49.24%
polky0421

 

임의의 모든 문자를 나타내는 표현식 : 콤마(.)

콤마(.) 는 임의의 모든 문자를 나타낸다.
콤마(.) 한 개는 임의의 문자 하나를, 콤마(.) 두 개는 임의의 문자 2개를 나타내는 것과 같이 갯수에 따라 문자의 갯수를 나타낸다.
이렇게 말하고 적는 것보다 직접 사용해보는 게 더 이해하기 쉽다.

예시1 ) 문자 a 뒤에 임의의 문자 1개를 포함하는 문자열

$ cat example.txt | grep "a."
name
jaynam
regular
under_bar
space bar
tab	tab

문자 a 뒤에 콤마(.) 를 한 개를 통해 a 뒤에 임의의 문자 한 개가 포함되어 있는 문자열이 나오는 것을 확인할 수 있다.

name, jaynam, regular, under_bar, space bar, tab    tab

예시2 ) 문자 m 앞에 임의의 문자 2개를 포함하는 문자열

$ cat example.txt | grep "..m"
name
jaynam
@tistory.com

문자 m 앞에 콤마(.) 두 개를 통해 m 앞에 임의의 문자 두 개가 포함되어 있는 문자열이 나오는 것을 확인할 수 있다.

name, jaynam, @tistory.com

이렇게 콤마(.)의 개수에 따라 임의의 문자 몇 개를 포함할 것인지 지정해줄 수 있다.

 

알파벳 대소문자, 숫자, 언더바(_) 를 포함하거나 그 외의 문자열을 나타내는 표현식 : \w , \W

알파벳 대소문자, 숫자, 언더바(_) 를 포함하는 문자열을 나타낼 때 \w 를 통해 나타낼 수 있다.

예시1 ) 알파벳 대소문자, 숫자, 언더바(_) 를 포함하는 문자열

$ cat example.txt | grep "\w" 
Hello
world
Linux
shell
script
name
jaynam
@tistory.com
regular
expression
under_bar
space bar
tab	tab
123
456
789
49.24%
polky0421

그리고 그 외의 문자열을 나타낼 때 \W 를 통해 나타낼 수 있다.

예시2 ) 알파벳 대소문자, 숫자, 언더바(_) 를 제외한 나머지 문자열

$ cat example.txt | grep "\W"
@tistory.com
space bar
tab	tab
49.24%

@ 와 콤마(.) tab(\t), % 등의 특수문자가 포함된 문자열이 나오는 것을 확인할 수 있었다.

 

공백 문자가 포함되거나 포함되지 않는 문자열을 나타내는 표현식 : \s , \S

공백 문자가 포함되어 있는 문자열을 나타낼 때는 \s 표현식을 사용한다.

예시1 ) 공백 문자를 포함하는 문자열

$ cat example.txt | grep "\s" 
space bar
tab	tab

공백 문자가 포함되지 않는 문자열을 나타낼 때는 \S 표현식을 사용한다.

예시2 ) 공백 문자를 포함하지 않는 문자열

$ cat example.txt | grep "\S"
Hello
world
Linux
shell
script
name
jaynam
@tistory.com
regular
expression
under_bar
space bar
tab	tab
123
456
789
49.24%
polky0421

"space bar" 라는 문자열과 "tab    tab" 라는 문자열에는 공백과 같이 다른 문자가 포함되어있어 결과에 나오는 것을 알 수 있다.
온전히 공백만 있는 경우 공백을 제외한 나머지 문자열이 나오는 것을 확인할 수 있다.

예시3 ) 공백 문자만 있는 텍스트 파일에서 \S 표현식 사용해보기

$ cat example2.txt 
start   
   
asdf

   

  

end
=============================================
$ cat example2.txt | grep "\S"
start   
asdf
end

중간에 공백을 추가해서 따로 텍스트 파일을 만들어서 확인해보았다.
\S 표현식을 통해 공백을 제외한 start, asdf, end 문자열만 나오는 것을 확인할 수 있다.

 

메타 문자를 그대로 나타내는 표현식 : \

메타 문자를 그대로 나타내기 위해서는 \(역슬래시) 라는 문자를 통해 나타낼 수 있다.
여기서 메타 문자라고 하면 표현식을 나타내는 데 필요한 문자들을 말하는 데 쉽게 말해서 특수문자 라고 이해하면 된다.

예시1 ) % 가 포함된 문자열

$ cat example.txt | grep "\%"
49.24%

예시2 ) @ 가 포함된 문자열

$ cat example.txt | grep "\@" 
@tistory.com

예시로 든 것 외에도 +, -, [, ], #, $, %, ^ 등 다양한 메타문자를 있는 그대로 사용할 수 있다.

 

개행문자와 탭을 나타내는 표현식 : \n, \t

개행문자라는 줄바꿈을 표현할 때 \n 표현식을 통해 나타낼 수 있다.
탭을 표현할 때 \t 표현식을 통해 나타낼 수 있다.
아마 이 표현식에 대해서는 익숙한 사람들이 많을 것이라고 생각하고 나도 많이 사용해봤기 때문에 익숙한 표현식이다.

예시 ) 탭 문자가 포함된 문자열

$ cat example.txt | grep "\t" 
tab	tab

 

정리

이번에는 대략 11가지의 표현식을 사용해보고 정리해봤는데
여기에 정리한 표현식 중에서 많이 사용하는 표현식을 고르자고 하면 아마,,,

문자열의 시작과 종료를 나타내는 표현식인 ^ 와 $
메타 문자를 있는 그대로 나타낼 수 있는 \
개행문자와 탭을 나타내는 표현식 \n, \t

오늘 정리한 11가지 중에서 3가지 정도 사용하는 것 같다.
물론 다른 8가지의 표현식을 사용해보긴 했지만 대체할 수 있는 다른 표현식이 있기 때문에 많이 사용하지는 않았던 것 같다.
아직 많은 정규 표현식이 있기 때문에 많은 표현식들을 사용해보고 정말 알아두면 좋을 것 같은 표현식만 따로 모아서 정리해봐야겠다.

 

- 정규 표현식이 잘 정리되어 있는 사이트 -

https://chancoding.tistory.com/162

 

[Linux] 정규 표현식 모음 / Regular Expression

정규 표현식 Regular Expression 정규식 표현 : 특정한 규칙을 가진 문자열의 집합을 표현함 ^ 문자열의 시작 : ^a 로 검색하면 a가 단어 중간인 경우는 제외 a로 시작 하는 것만 검색됨 $ 문자열의 끝 : a

chancoding.tistory.com

https://hamait.tistory.com/342

 

정규표현식 (Regex) 정리

정규표현식은 아주 가끔 쓰기때문에 항상 다시 볼때마다 헷갈리곤 하는데.. 주요 사용예를 정리하여 보았다. 나중에 찾아보기 편하라고~ 정규 표현식의 용어들정규 표현식에서 사용되는 기호를

hamait.tistory.com

https://inpa.tistory.com/entry/LINUX-📚-정규표현식-과-grep-명령어-정복하기-패턴-검색-확장브래킷

https://rfriend.tistory.com/373

 

리눅스 정규 표현식 (Linux Regular Expression)

이번 포스팅에서는 리눅스 정규 표현식 (Linux Regular Expression)에 대해서 알아보겠습니다. 정규 표현식은 데이터 검색, 복잡한 패턴 매칭을 도와주는 특별한 문자입니다. 정규표현식(regular expression)

rfriend.tistory.com

 

728x90
반응형
복사했습니다!