운영체제/Linux

[명령어] grep에 대해서 (옵션 정리)

ahgle 2022. 12. 1. 18:04
728x90
반응형

안녕하세요, 아글입니다.

 

오늘은 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        : PATTERNPerl 정규 표현식(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 명령어의 사용 방법과 옵션에 대해 알아보았습니다.

728x90