4. Analyze Text Using Basic Regular Expressions
정규 표현식(regex)은 복잡한 패턴 조건을 지정하여 고급 텍스트 검색을 가능하게 합니다. 단순 검색과 달리, regex는 유효한 일치 항목과 거짓 양성(false positive)을 구별하는 데 도움이 됩니다. 예를 들어, "5.23"과 같이 유효하지 않은 주소를 피하면서 실제 IP 주소를 찾을 수 있습니다.
Linux 설정 파일에서 주석 줄 찾기
설정 파일은 주석을 나타내기 위해 파운드 기호(#)를 사용합니다. 이러한 줄을 찾으려면 패턴 시작 부분에 캐럿 연산자(^)를 사용합니다:
$ grep '^#' /etc/login.defs
주석이 아닌 줄만 표시하려면 일치를 반전시킵니다:
$ grep -v '^#' /etc/login.defs
특정 텍스트로 시작하는 줄의 경우:
$ grep '^PASS' /etc/login.defs
캐럿(^)과 달러 기호($) 연산자
캐럿은 줄의 시작을 표시하고, 달러 기호는 줄의 끝을 표시합니다. 이를 통해 의도하지 않은 일치를 방지할 수 있습니다:
$ grep -w '7$' /etc/login.defs
이 명령은 "7"이 어디에나 나타나는 것이 아니라, 특별히 "7"로 끝나는 줄을 찾습니다.
점(.) 연산자와 와일드카드
마침표는 정확히 하나의 문자와 일치합니다. 패턴 C.T는 "cat", "cut", "CRT"와 일치하지만 "CT"와는 일치하지 않습니다. 전체 단어 일치를 위해 grep의 -w 옵션을 사용합니다:
$ grep -wr 'c.t' /etc/
별표(*) 및 플러스(+) 연산자
별표는 0회 이상의 반복을 허용합니다: let*은 "LE", "LET", "LETT"와 일치합니다.
$ grep -r 'let*' /etc/
플러스 연산자(+)는 1회 이상의 발생을 요구합니다. 기본 정규 표현식에서는 이스케이프가 필요합니다:
$ grep -r '0\+' /etc/
확장 정규 표현식(-E)을 사용하면 이스케이프가 필요 없습니다.