Linux / 명령어 / grep
grep은 리눅스 운영체제에서 문자열 검색에 사용되는 명령어입니다. grep은 Global Regular Expression Print의 약자로, 텍스트 파일에서 특정 문자열이나 정규 표현식(패턴)을 검색하고, 해당 줄을 출력합니다.
기본
기본 구조는 다음과 같습니다.
grep [옵션] '검색할 패턴' 파일명
예제 1
예를 들어 다음과 같은 a.txt와 b.txt가 있다고 할 때...
a.txt
abc bcd cde bcd cde def efg fgh ghi
b.txt
abc bcd cde bcd cde def efg fgh ghi
- a.txt에서 bcd를 포함한 줄을 출력합니다.
# grep bcd a.txt abc bcd cde bcd cde def
- 검색어에 공백이 있는 경우 큰 따옴표 또는 작은 따옴표로 감쌉니다.
# grep "abc bcd" a.txt abc bcd cde
- 기본적으로 대소문자를 구분합니다. -i 옵션을 사용하면 대소문자를 구분하지 않습니다.
# grep -i BCD a.txt abc bcd cde bcd cde def
- -v 옵션을 사용하면 검색어를 포함하지 않는 줄을 출력합니다.
# grep -v bcd a.txt efg fgh ghi
- -n 옵션을 사용하면 줄번호를 표시합니다.
# grep -n bcd a.txt 1:abc bcd cde 2:bcd cde def
- -c 옵션을 사용하면 검색어를 포함한 줄의 개수를 출력합니다.
# grep -c bcd a.txt 2
- 파일명을 여러 개 넣으면, 해당 파일들을 대상으로 결과를 출력합니다. 결과 앞에는 파일명이 표시됩니다.
# grep bcd a.txt b.txt a.txt:abc bcd cde a.txt:bcd cde def b.txt:abc bcd cde b.txt:bcd cde def
- 와일드카드를 이용할 수도 있습니다. 다음과 같이 하면 확장자가 txt인 모든 파일을 대상으로 검색합니다.
# grep bcd *.txt a.txt:abc bcd cde a.txt:bcd cde def b.txt:abc bcd cde b.txt:bcd cde def
- -l 옵션을 사용하면 파일명만 출력합니다.
# grep -l bcd *.txt a.txt b.txt
- -r 옵션을 사용하고, 파일명 위치에 디렉토리 이름을 넣으면, 해당 디렉토리와 그 하위 디렉토리에 있는 모는 파일에 대하여 검색합니다.
# grep -r bcd ./ ./a.txt:abc bcd cde ./a.txt:bcd cde def ./b.txt:abc bcd cde ./b.txt:bcd cde def
예제 2
명령어로 출력되는 결과에서 검색어를 포함하는 줄을 추려낼 수 있습니다.
- dmesg(시스템 부팅 메시지 확인 명령어)로 출력되는 결과에서 usb를 포함하는 줄을 찾습니다.
# dmesg | grep -i usb [ 0.091630] ACPI: bus type USB registered [ 0.091648] usbcore: registered new interface driver usbfs [ 0.091657] usbcore: registered new interface driver hub [ 0.091669] usbcore: registered new device driver usb
- apache2 서비스 상태를 출력합니다.
# systemctl list-unit-files | grep apache2 apache2.service enabled enabled apache2@.service disabled enabled