기본 정규 표현식으로 패턴 매칭하기
이 단계에서는 grep과 함께 기본 정규 표현식 (BRE) 을 사용하여 더욱 유연한 검색 패턴을 만드는 방법을 살펴봅니다. BRE 에서 메타문자라고 불리는 특정 문자들은 문자 그대로의 의미를 넘어선 특별한 의미를 갖습니다. 이를 통해 고정된 문자열뿐만 아니라 패턴을 일치시킬 수 있습니다.
두 가지 핵심 메타문자인 *(별표) 와 .(마침표) 를 살펴보겠습니다.
먼저 별표 (*) 를 살펴보겠습니다. 이 메타문자는 바로 앞의 문자가 0 번 이상 반복되는 것과 일치합니다. 이를 실제로 확인하려면 다음 명령어를 실행하십시오. 쉘이 *를 파일 와일드카드로 확장하지 않고 문자 그대로의 패턴으로 처리하도록 패턴을 작은따옴표 ('roo*') 로 묶습니다.
grep 'roo*' /etc/passwd
출력에는 다음과 같이 여러 행이 표시될 것입니다.
root:x:0:0:root:/root:/bin/bash
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
rtkit:x:108:113:RealtimeKit,,,:/proc:/usr/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
이 결과를 분석해 보겠습니다. 'roo*' 패턴은 ro 뒤에 0 개 이상의 o가 오는 행을 검색합니다.
root 행은 roo(ro 뒤에 한 개의 o) 를 포함하므로 일치합니다.
proxy 행은 "proxy"에 ro(ro 뒤에 0 개의 o) 를 포함하므로 일치합니다.
systemd-timesync 행은 "Synchronization"에 ro를 포함하므로 일치합니다.
rtkit 행은 "proc"에 ro를 포함하므로 일치합니다.
operator 행은 "operator"와 "/root" 모두에 ro를 포함하므로 일치합니다.
이제 마침표 (.) 메타문자를 살펴보겠습니다. 마침표는 임의의 단일 문자와 일치합니다. 다음 명령어를 실행하여 동작이 어떻게 다른지 확인하십시오.
grep 'ro.' /etc/passwd
이번에도 출력에는 여러 일치 항목이 표시됩니다.
root:x:0:0:root:/root:/bin/bash
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
rtkit:x:108:113:RealtimeKit,,,:/proc:/usr/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
'ro.' 패턴은 ro 뒤에 정확히 하나의 임의의 문자가 오는 행을 검색합니다.
root 행은 "root"에서 ro 뒤에 o가 오므로 일치합니다.
proxy 행은 "proxy"에서 ro 뒤에 x가 오므로 일치합니다.
systemd-timesync 행은 "Synchronization"에서 ro 뒤에 n이 오므로 일치합니다.
rtkit 행은 "proc"에서 ro 뒤에 c가 오므로 일치합니다.
operator 행은 "operator"와 "/root"에서 ro 뒤에 다른 문자가 오므로 일치합니다.
출력을 비교해 보면 정규 표현식의 위력을 명확히 알 수 있습니다. 'roo*'와 'ro.' 패턴 모두 여러 행을 일치시키지만, 서로 다른 메타문자를 통해 검색 방식을 다양하게 미세 조정할 수 있음을 보여줍니다.