유닉스 / 리눅스에서 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.