리눅스에서 자주 사용하는 정규 표현식에 대해서 정리하려고 한다.
정규 표현식은 리눅스 뿐만 아니라 다양한 언어에서 사용되고 있다.
정규 표현식이란
"특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어"
라고 정의되어 있다.
굳이 정규 표현식을 알아야 하나 라는 궁금증이 생길 수도 있다.
사실 실무에서 굳이 정규 표현식을 사용하지 않아도 여러 명령어를 사용해 충분히 원하는 결과를 얻을 수 있다.
나도 마찬가지로 정규 표현식을 사용하기 보다 내가 알고 있는 명령어를 사용해 결과를 얻는 게 더 편했기 때문에 사용하지 않았던 것 같다.
하지만 정규 표현식을 사용하게 된다면 보다 쉽고 간단하게 원하는 결과를 얻을 수 있다는 장점이 있다.
물론 다 좋은 것 만은 아니다. 간결하게 표현하는 만큼 가독성이 떨어질 수 있고 아는 만큼 보이기 때문에
모르는 사람이 이해하기에는 다소 어려울 수 있다는 단점이 있다는 것을 알아야 한다.
아는 만큼 보이는 것이 정규 표현식이라고 할 정도로 알고 있다면 유용하게 사용할 수 있다고 생각한다.
그래서 적절한 상황에서 정규 표현식을 사용하게 되면 보다 편하고 간단하게 원하는 결과를 얻을 수 있다는 것을 알고 있기 때문에
정규 표현식에 대해서 간단한 것부터 하나씩 사용해보면서 이해해보려고 한다.
정규 표현식 정리 요약
^[문자] | 문자열의 시작을 나타냄 |
[문자]$ | 문자열의 종료를 나타냄 |
\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
https://hamait.tistory.com/342
https://inpa.tistory.com/entry/LINUX-📚-정규표현식-과-grep-명령어-정복하기-패턴-검색-확장브래킷
https://rfriend.tistory.com/373
'리눅스 > Linux' 카테고리의 다른 글
리눅스 정규 표현식(Regular Expression) 정리 (3) - regex101 task 1 풀이 (0) | 2022.04.14 |
---|---|
리눅스 정규 표현식(Regular Expression) 정리 (2) (0) | 2022.04.09 |
리눅스 레이드(RAID) (0) | 2022.01.30 |
메모리 Buffer 와 Cache 이해하기 (0) | 2022.01.20 |
리눅스 시스템 재시작 로그 확인 (0) | 2021.11.18 |