본문 바로가기

프로그래밍

[Linux] grep 문자열 검색 활용하기

유닉스 / 리눅스에서 grep 명령어

grep 필터는 파일에서 특정 문자 패턴을 검색하고 해당 패턴이 포함 된 모든 행을 표시합니다. 파일에서 검색되는 패턴을 정규 표현식이라고합니다 (grep은 전체적으로 정규 표현식을 검색하고 출력함을 나타냅니다).

명령어 사용법

grep [옵션] 패턴 [파일명]

옵션 설명

-E        : PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.
-F        : PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석, 검색 속도가 빠르다.
-G        : PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.
-P        : PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.
-e        : 매칭을 위한 PATTERN 전달.
-f        : 파일에 기록된 내용을 PATTERN으로 사용.
-i        : 대/소문자 무시.
-v        : 매칭되는 PATTERN이 존재하지 않는 라인 선택.
-w        : 단어(word) 단위로 매칭.
-x        : 라인(line) 단위로 매칭.
-z        : 라인을 newline(\n)이 아닌 NULL(\0)로 구분.
-m        : 최대 검색 결과 갯수 제한.
-b        : 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.
-n        : 검색 결과 출력 라인 앞에 라인 번호 출력.
-H        : 검색 결과 출력 라인 앞에 파일 이름 표시.
-h        : 검색 결과 출력 시, 파일 이름 무시.
-o        : 매치되는 문자열만 표시.
-q        : 검색 결과 출력하지 않음.
-a        : 바이너리 파일을 텍스트 파일처럼 처리.
-I        : 바이너리 파일은 검사하지 않음.
-d        : 디렉토리 처리 방식 지정. (read, recurse, skip)
-D        : 장치 파일 처리 방식 지정. (read, skip)
-r        : 하위 디렉토리 탐색.
-R        : 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.
-L        : PATTERN이 존재하지 않는 파일 이름만 표시.
-l        : 패턴이 존재하는 파일 이름만 표시.
-c        : 파일 당 패턴이 일치하는 라인의 갯수 출력.

 

정규 표현식(Regular Expression)


. (dot)  : 단일 문자.
?        : 앞의 문자는 0 번 또는 1 번만 일치합니다.
*        : 앞의 문자가 0 번 이상 일치합니다.
+        : 앞의 문자가 1 회 이상 일치합니다.
{n}      : 앞의 문자가 정확히 n 번 일치합니다.
{n, m}   : 앞의 문자는 n 번 이상 m 번 이상 일치합니다.
[agd]    : 문자는 대괄호 안에 포함 된 문자 중 하나입니다.
[^agd]   : 문자가 대괄호 안에 포함 된 문자 중 하나가 아닙니다.
[c-f]    : 대괄호 안의 대시는 범위로 작동합니다. 이 경우 문자 c, d, e 또는 f를 의미합니다.
()       : 여러 문자를 그룹화하여 하나의 동작으로 작동 할 수 있습니다.
|        : 논리 OR 연산.
^        : 줄의 시작과 일치합니다.
$        : 줄의 끝과 일치합니다.

 

grep 명령어 사용 예제


$ cat test.log

결과
Linux is great os. linux is opensource. linux is free os.
learn operating system.
Unix linux which one you choose.
liNux is easy to learn. linux is a multiuser os. Learn linux.
linux is a powerful.

 

1. 대소 문자를 구분하지 않는 검색 : -i 옵션을 사용하면 test.log 파일에서 대소 문자를 구분하지 않고 검색 할 수 있습니다.


$ grep -i "LInux" test.log

결과
Linux is great os. linux is opensource. linux is free os.
Unix linux which one you choose.
liNux is easy to learn. linux is a multiuser os. Learn linux.
linux is a powerful.

 

2. 일치 횟수 표시 : 주어진 문자열 / 패턴과 일치하는 줄 수를 찾을 수 있습니다 .


$ grep -c "linux" test.log

결과
4

 

3. 패턴과 일치하는 파일 이름을 표시합니다. 주어진 문자열 / 패턴이 포함 된 파일만 표시 됩니다.


$ grep -l "linux" *

결과
test.log

 

4. 파일에서 전체 단어 확인 : grep -w 옵션은 전체 단어 단위로 검색합니다.


$ grep -w "linux" test.log

결과
Linux is great os. linux is opensource. linux is free os.
Unix linux which one you choose.
liNux is easy to learn. linux is a multiuser os. Learn linux.
linux is a powerful.

 

5. 일치하는 패턴 만 표시 : 기본적으로 grep은 일치하는 문자열이있는 전체 행을 표시합니다. -o 옵션을 사용하여 grep이 일치하는 문자열 만 표시하도록 할 수 있습니다.


$ grep -o "linux" test.log

결과
linux
linux
linux
linux
linux
linux

 

6. grep -n을 사용하여 출력을 표시하는 동안 줄 번호를 표시합니다. 줄이 일치하는 파일의 줄 번호를 표시합니다.


$ grep -n "linux" test.log

결과
1:Linux is great os. linux is opensource. linux is free os.
3:Unix linux which one you choose.
4:liNux is easy to learn. linux is a multiuser os. Learn linux.
5:linux is a powerful.

 

7. 패턴 일치 반전 : -v 옵션을 사용하여 지정된 검색 패턴과 일치하지 않는 행을 표시 할 수 있습니다.


$ grep -v "linux" test.log

결과
learn operating system.

 

8. 시작 문자열과 일치하는 패턴 : '^' 정규식 패턴은 줄의 시작을 지정합니다. 주어진 문자열이나 패턴으로 시작하는 줄과 일치하는 행을 표시합니다.


$ grep "^linux" test.log

결과
linux is a powerful.

 

9. 문자열로 끝나는 라인 매칭 : '$' 정규 표현식 패턴은 라인의 끝을 지정합니다. 주어진 문자열이나 패턴으로 끝나는 줄과 일치하는 행을 표시합니다.


$ grep "os.$" test.log

결과
Linux is great os. linux is opensource. linux is free os.

 

10. -f 파일 옵션, 한 줄에 하나씩 파일에서 패턴을 가져옵니다.


$ cat pattern.log

결과
free
Learn

 


$ grep -f pattern.log test.log

결과
Linux is great os. linux is opensource. linux is free os.
liNux is easy to learn. linux is a multiuser os. Learn linux.