안녕하세요, 아글입니다.
오늘은 grep 명령어에 대해서 알아보겠습니다.
특정 파일에서 조건으로 지정한 문자열이나 정규표현식을 포함한 행을 출력해주는 명령어입니다.
다른 명령어들과 조합하여 응용되는 경우가 많아서, 이 grep 명령어는 활용도가 굉장히 높다고 할 수 있습니다.
grep 명령어 사용법
grep [옵션][패턴][파일명]
ex) 1.txt에서 apple이라는 문자가 들어간 파일을 찾고 싶을 때
# grep apple 1.txt
1.txt:apple
ex2) 모든 파일에서 app 라는 문자가 들어간(포함된) 파일을 찾고 싶을 때 : * 을 사용
# grep app *
grep: 123: Is a directory
1.txt:apple
1.txt:app
2.txt:app
2.txt:app
2.txt:app
2.txt:app
2.txt:appa
2.txt:appp
3.txt:app
3.txt:app
기본적인 grep 명령어 사용 방법을 알아보았으니, 이제 옵션을 알아봅시다.
수많은 옵션이 있습니다.
grep [OPTION...] PATTERN [FILE...]
-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 : 파일 당 패턴이 일치하는 라인의 갯수 출력.
특히 자주 사용하는 옵션들의 사용 예시를 통해 어떻게 옵션이 활용되는 지 알아봅시다.
먼저 예제를 위해 아래와 같은 환경에서 실습을 진행하겠습니다.
현재 저의 위치는 20221116 이라는 디렉터리이며,
아래 숫자, 영어로된 각종 txt파일, log파일 과 test, test123이라는 디렉터리가 하위에 있는 상태입니다.
물론 각 파일에 어떤 내용이 담겨있는 지는 모르는 상황입니다.

Apple이라는 단어가 들어가는 모든 파일을 찾아보았습니다.
1.txt라는 파일에 Apple이 들어가있었고, test, test123은 디렉터리라서 조건에 부합하지 않는다고 직접 알려주고 있습니다.

-r 옵션 : 하위 디렉터리까지 탐색
-r 옵션을 주고 Apple 이라는 문자열을 검색하니, test라는 디렉터리 아래 11.txt 파일에서도 발견이 되었습니다.

-n 옵션 : 패턴이 존재하는 라인의 번호를 출력
-r, -n 옵션을 함께 써서 Apple이라는 문자열을 확인해보았습니다.
참고로 다중 옵션을 사용 시, 옵션의 순서는 상관이 없습니다.
이번에는 1.txt 파일의 첫 번째 라인과 test디렉터리의 11.txt 파일의 1번째 라인에 Apple 이 있는 것을 확인할 수 있습니다.

-i 옵션 : 대소문자를 무시하고 출력
이번에는 i옵션을 추가로 주어 apple라는 문자열의 대소문자를 구분하지 않고, 해당 파일의 어느 라인에 있는 지 출력해보았습니다. 1.txt의 1번 째 라인에 Apple, 2번 째 라인에 apple이 있고, 나머지는 보시는 바와 같습니다.

리눅스커맨드 명령어는 다른 명령어들과 혼합하여 사용하면 원하는 조건에 알맞는 내용을 출력할 수 있는 강력한 힘이 있습니다.
이렇게 오늘은 grep 명령어의 사용 방법과 옵션에 대해 알아보았습니다.
'운영체제 > Linux' 카테고리의 다른 글
passwd 명령어에 대해서 (0) | 2023.02.26 |
---|---|
커널 컴파일에 대해서 (0) | 2023.02.26 |
LVM에 대해서, LVM(Logical Volume Manager)이란? -- 아글아글IT (0) | 2022.11.21 |
RAID에 대해서 (0) | 2022.11.18 |
[명령어] split 사용방법. '하나의 파일을 여러 개의 작은 파일로 분리해보자' (0) | 2022.11.16 |