들어가기
grep과 정규표현식은 중요하고 또 특히 정규표현식은 리눅스 뿐 아니라 프로그래밍이나 여러가지 부분에서 사용이 됩니다.
이번 포스트에서는 우선 기초만 정리를 하였습니다.
정규표현식에 대해서는 추후 자세히 설명하는 포스트를 정리하도록 하겠습니다.
grep 명령어
grep은 파일이나 표준 입력에서 문자열을 검색하기 위한 기본 명령어입니다.
옵션 조합에 따라 검색 결과를 상당히 유연하게 제어할 수 있습니다.
-i: 대소문자를 구분하지 않고 검색합니다.-v: 검색어가 포함되지 않은 행을 출력합니다.-e: 여러 개의 검색어를 지정합니다.
-e 검색어1 -e 검색어2 -e 검색어3-C NUM: 검색어 기준으로 위아래 NUM 줄을 함께 출력합니다.-A NUM: 검색어 기준으로 아래 NUM 줄을 함께 출력합니다.-B NUM: 검색어 기준으로 위 NUM 줄을 함께 출력합니다.
bashgrep -i kernel /etc/passwd
grep -e root -e ssh -e bus /etc/passwd
Regular Expression
정규표현식은 문자열 패턴을 정의하기 위한 규칙입니다.
grep은 기본적으로 정규표현식을 지원합니다.
-
^: 정규표현식의 시작을 의미합니다. -
$: 정규표현식의 끝을 의미합니다. -
.: 임의의 문자 1개를 의미합니다. -
[]: 대괄호 안 문자 중 하나를 의미합니다.[a-e]: a부터 e 중 하나를 의미합니다.
-
{}: 바로 앞 문자의 반복 횟수를 지정합니다. -
*: 바로 앞 문자가 0회 이상 반복됩니다. -
+: 바로 앞 문자가 1회 이상 반복됩니다. -
?: 바로 앞 문자가 0 또는 1회 반복됩니다.a*b: b, ab, aab, aaab, aaaaba+b: ab, aab, aaab, aaaaba?b: b, ab
-
(): 소괄호는 하나의 묶음으로 처리됩니다.
bash# [단순 문자열 검색]
# 정규표현식 없이 very 포함 여부만 검사합니다.
cat /etc/services | grep very
# [$ 기호]
# very로 끝나는 행만 출력합니다.
cat /etc/services | grep 'very$'
# [. 기호]
# r + 임의의 문자 2개 + t 형태를 검색합니다.
grep 'r..t' /etc/passwd
# [^, [] 기호]
# s로 시작하고 다음 문자가 y 또는 h인 행을 검색합니다.
grep '^s[yh]' /etc/passwd
# [*, +, ? 기호 예시]
# 실제 grep 예시는 데이터 특성상 생략합니다.
# vim 내부에서 검색
# vim에서는 특수문자 사용 시 \를 붙여야 합니다.
/o*ve
/o\+ve
/o\?ve