본문 바로가기
기타/셸스크립트

[리눅스 문자열 찾기] grep 기본 사용법

by 일코 2024. 2. 9.

grep은 파일이나 출력 등에서 특정 문자열을 찾아낼 수 있는 명령어이며,
리눅스 환경에서 가장 많이 사용되는 명령어 중 하나로 꼽힌다.
다양한 옵션이 있지만 대표적인 사용방법은 아래 세 가지다.

1. grep [패턴] [파일]

패턴에는 따옴표를 넣지 않아도 괜찮지만
패턴 중간에 스페이스가 있는 경우에는
의도한 대로 작동하지 않을 수 있으므로
따옴표를 넣어 주는 것을 추천한다. (작은 따옴표, 큰 따옴표 무관하지만 짝은 맞춰주기)
그리고 패턴에는 일부 정규식이 사용될 수 있다.

# ~/.zshrc에서 if문 찾기
grep "if" ~/.zshrc

2. grep [옵션] [패턴] [파일]

[옵션]은 수십개라서 한 번에 암기하기에는 많은 양이지만,
grep --help 를 통해 천천히 읽어보면서 참고하면 익숙해질 수 있다.
대표적인 옵션만 간략히 적어보면 아래와 같다.

-E : 확장 정규식 사용 선언(--extended-regexp)
-P : Perl 문법의 정규식 사용 선언(--perl-regexp)
-e : 패턴을 두 개 이상 사용할 때 -e [패턴] -e [패턴] 식으로 사용할 수 있음(--regexp=Pattern)
-i : 대소문자 구분하지 않음(--ignore-case)
-f : 패턴을 저장해 둔 파일에서 패턴을 불러와 적용(--file=FILE)

-e와 -i 및 -f 패턴은 정규식에 대한 이해 없이도 사용하기 쉬운 옵션이므로
많이 활용하게 된다.

# ~/.zshrc에서 대소문자 구분 없이 "ZSH"가 들어가는 라인 출력하기
grep -i "zsh" ~/.zshrc

-i 는 IgnoreCase의 약자로, 대소문자구분을 하지 않겠다는 옵션.

# ~/.zshrc 안에서 [ 또는 (가 포함된 라인 출력
grep -e '\[' -e '(' ~/.zshrc

대괄호는 정규식 문법 일부라서, 문자그대로의(리터럴한) '['를 사용할 때는 역슬래시(\)를 붙여야 한다.

3. 뭔가 출력되는 명령어 | grep [옵션] [패턴]

출력의 아웃풋이 grep의 [파일]이 되는 개념이다. 중간의 세로 작대기(|)를 파이프라고 부른다.

# ls -al의 결과 중 "."이 들어간 라인 출력
ls -al | grep '\.'

"."은 정규식문법의 "아무 한 글자"이므로 리터럴한 점(.)을 표현하기 위해 역슬래시(\)를 앞에 붙여야 한다.

 

# ~/.bashrc 안에 "alias"로 시작하거나 "# alias"로 시작하는 라인 출력하기
cat ~/.bashrc | grep -i -e '^alias' -e '^# alias'

 

마치며

간단히 grep의 사용방법에 대해 알아보았다.
이미 윈도우 탐색기의 노예가 되어버린 내게는
grep이나 find조차도 부담스러운 명령어지만,
차근차근 셸스크립트나 리눅스 명령어에
조금씩 익숙해지려고 한다. 의지를 다지기 위해
윈도우 노트북 하나를 밀고 우분투를 설치했다.
(이 포스팅도 우분투 노트북에서 작성중)
다음 포스팅은 find에 대해 다룰 예정.

 

댓글