Linux의 Grep 명령(파일에서 텍스트 찾기)

Linux의 Grep 명령(파일에서 텍스트 찾기)

2022-06-01 last update

14 minutes reading grep terminal
grep 명령은 Linux에서 가장 강력하고 자주 사용하는 명령 중 하나인'전역 정규 표현식 인쇄'를 나타냅니다.grep 하나 이상의 입력 파일에서 주어진 패턴과 일치하는 줄을 검색하고 일치하는 줄마다 표준 출력에 기록합니다.파일이 지정되지 않은 경우 grep 표준 입력에서 읽으면 다른 명령의 출력이 됩니다.본고에서 실제 예시와 가장 일반적인 GNUgrep 옵션에 대한 상세한 설명을 통해 grep 명령을 사용하는 방법을 보여 드리겠습니다.

grep 명령 구문

grep 명령의 문법은 다음과 같다.
grep [OPTIONS] PATTERN [FILE...]
괄호 안에 있는 항목은 선택할 수 있다.
  • OPTIONS - 0개 이상의 옵션이 있습니다.Grep 포함 number of options
    행동을 통제하다.
  • PATTERN - 검색 모드입니다.
  • FILE - 0개 이상의 입력 파일 이름입니다.
  • 파일을 검색하려면 명령을 실행하는 사용자에게 파일 읽기 권한이 있어야 합니다.

    파일에서 문자열 검색

    grep 명령의 가장 기본적인 사용법은 파일에서 문자열 (텍스트) 을 검색하는 것이다.예를 들어, 문자열bash을 포함하는 모든 행을 표시 /etc/passwd 합니다.
    문자열에 공백이 포함되어 있는 경우 따옴표 또는 큰따옴표로 묶어야 합니다.
    grep bash /etc/passwd

    일치 반전(제외)

    패턴과 일치하지 않는 줄을 표시하려면 -v(또는 --invert-match 옵션을 사용하십시오.예를 들어, 문자열nologin이 없는 행을 인쇄하려면
    root:x:0:0:root:/root:/bin/bash
    :x:1000:1000::/home/:/bin/bash
    
    grep "Gnome Display Manager" /etc/passwd

    Grep을 사용하여 명령 출력 필터링

    명령의 출력을 파이핑용 grep 필터링을 통해 필터링할 수 있으며 지정된 패턴과 일치하는 줄만 터미널에 인쇄할 수 있습니다.예를 들어 시스템에서 사용자 신분으로 실행되는 프로세스www-data를 찾아내려면 다음 명령 ps 을 사용할 수 있다
    명령:
    grep -v nologin /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    colord:x:124:124::/var/lib/colord:/bin/false
    git:x:994:994:git daemon user:/:/usr/bin/git-shell
    :x:1000:1000::/home/:/bin/bash
    
    명령에 여러 파이프를 연결할 수도 있습니다.위의 출력에서 보듯이 grep 프로세스를 포함하는 줄도 있습니다.이 줄을 표시하지 않으려면 다음과 같이 다른 grep 사례에 출력을 전달합니다.
    ps -ef | grep www-data
    www-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
    root     18272 17714  0 16:00 pts/0    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data
    www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
    www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process
    

    반복 검색

    검색 모드로 돌아가려면 grep 옵션(또는 -r을 사용하여 --recursive 을 호출합니다.이 옵션을 사용하면 지정된 디렉토리의 모든 파일을 검색하고 반복적으로 만나는 기호 링크를 건너뜁니다.모두를 따라symbolic linksgrep 대신 -r 옵션(또는 -R을 사용합니다.다음 예는 --dereference-recursive 디렉터리의 모든 파일에서 문자열 을 검색하는 방법을 보여 줍니다.
    ps -ef | grep www-data | grep -v grep
    출력은 파일의 전체 경로를 접두사로 하는 일치하는 줄을 포함합니다. (adsbygoogle=window.adsbygoogle | | [])푸시({});
    www-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
    www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
    www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process
    
    /etc 옵션을 사용하면 -R 모든 기호 링크가 따릅니다.
    grep -r  /etc
    다음 출력의 마지막 줄을 주의하십시오.grep 호출grep을 사용할 때 이 줄은 인쇄되지 않습니다. 왜냐하면 Nginx-r 디렉터리의 파일은 sites-enabled 디렉터리의 프로필을 가리키는 기호 링크이기 때문입니다.
    /etc/hosts:127.0.0.1 node2.
    /etc/nginx/sites-available/:    server_name    www.;
    

    파일 이름만 표시

    기본값sites-available 출력을 억제하고 패턴이 일치하는 파일의 이름만 인쇄하려면 grep(또는 -l 옵션을 사용합니다.다음 명령 검색current working directory에서 --files-with-matches로 끝나는 모든 파일
    문자열.conf이 포함된 파일 이름만 인쇄합니다.
    grep -R  /etc
    출력은 다음과 같습니다.
    /etc/hosts:127.0.0.1 node2.
    /etc/nginx/sites-available/:    server_name    www.;
    /etc/nginx/sites-enabled/:    server_name    www.;
    
    옵션은 일반적으로 귀속 옵션과 함께 사용됩니다.
    grep -l  *.conf

    대소문자 구분 없는 검색

    기본적으로 -l 대소문자를 구분합니다.이것은 대문자와 소문자가 서로 다른 것으로 간주된다는 것을 의미한다.대소문자를 검색할 때 무시하려면 -R 옵션 (또는 grep 을 사용하여 grep 을 호출합니다.예를 들어, 아무 옵션 없이 -i 을 검색하면 다음 명령에는 출력이 표시되지 않습니다. 즉, 일치하는 행이 표시됩니다.
    tmux.conf
    haproxy.conf
    
    그러나 --ignore-case 옵션을 사용하여 대소문자를 구분하지 않는 검색을 수행하면 대소문자가 일치합니다.
    grep -Rl  /tmp
    "Zebra"를 지정하면 "Zebra"가 일치합니다."ZEbrA"또는 이 문자열의 다른 대소문자 조합입니다.
    grep Zebra /usr/share/words

    전체 단어 검색

    문자열을 검색하면 Zebra 문자열이 큰 문자열에 포함된 모든 줄을 표시합니다.예를 들어, "gnu"를 검색하면 "gnu"와 일치하는 큰 단어 (예: "cygnus"또는 "magnum") 의 모든 줄을 포함합니다.
    grep -i Zebra /usr/share/words
    zebra
    zebra's
    zebras
    
    지정된 문자열이 전체 단어 (비단어 문자로 묶여) 인 줄만 되돌리려면 -i (또는 grep 옵션을 사용하십시오.단어 문자는 영숫자 문자(-w, --word-regexpa-z, 밑줄(A-Z을 포함합니다.다른 모든 문자는 비단어 문자로 간주됩니다.위의 명령과 같은 명령을 실행하면 0-9 옵션을 포함하여 _ 명령은 -w 을 별도의 단어로 포함하는 줄로만 되돌려줍니다.
    grep gnu /usr/share/words
    cygnus
    gnu
    interregnum
    lgnu9d
    lignum
    magnum
    magnuson
    sphagnum
    wingnut
    

    행 번호 표시

    ,grep(또는gnu 옵션은 패턴과 일치하는 문자열을 포함하는 줄의 번호를 알려줍니다.이 옵션을 사용하면 -n 행 번호를 접두사로 하는 표준 출력과 일치하도록 인쇄됩니다.예를 들어 --line-number 파일에 일치하는 줄 번호를 접두사로 하는 문자열grep의 줄을 표시하려면 다음 명령을 사용할 수 있습니다.
    grep -w gnu /usr/share/words
    아래의 출력은 10423줄과 10424줄에서 일치하는 항목을 찾을 수 있습니다.
    gnu
    

    계수 일치 항목

    정합 행 수를 표준 출력에 인쇄하려면 grep(또는 /etc/services 옵션을 사용합니다.다음 예시에서 우리는 bash 을 셸로 하는 계정 수를 계산하고 있습니다.
    grep -n 10000 /etc/services
    10423:ndmp            10000/tcp
    10424:ndmp            10000/udp
    

    조용 모드

    -c(또는--count)조용한 모드에서 실행하고 표준 출력에 아무것도 표시하지 말라고 알려줍니다.일치하는 항목을 찾으면 명령이 종료됩니다 /usr/bin/zsh.셸 스크립트에서 -q 파일을 사용하여 문자열이 포함되어 있는지 확인하고 결과에 따라 특정 작업을 수행할 때 유용합니다.다음은 조용한 모드에서 --quiet grep statement 테스트 명령으로 사용하는 예입니다.
    :
    regular expressiongrep -c '/usr/bin/zsh' /etc/passwd

    기본 정규 표현식

    GNU Grep은 3개regular expression
    기본, 확장 및 Perl 호환 기능 집합입니다.기본적으로, 0 모드는 기본 정규 표현식으로 해석되며, 원 문자를 제외한 모든 문자는 사실상 일치하는 정규 표현식입니다.다음은 가장 자주 사용하는 메타문자 목록입니다.
  • grep 기호를 사용하여 행의 첫 번째 표현식과 일치합니다.다음 예제에서 문자열 grep 은 행의 맨 처음에 나타나는 경우에만 일치합니다.
    4
    
  • if(달러) 기호를 사용하여 한 줄의 끝에 있는 표현식을 일치시킵니다.다음 예제에서 문자열 grep 은 행의 맨 끝에 있는 경우에만 일치합니다.
    if grep -q PATTERN filename
    then
        echo pattern found
    else
        echo pattern not found
    fi
    
  • ^(마침표) 기호를 사용하여 단일 문자와 일치합니다.예를 들어, kangaroo로 시작하고 두 문자열$로 끝나는 모든 내용을 일치시키려면
    grep "^kangaroo" file.txt
  • kangaroo(괄호)를 사용하여 괄호에 포함된 모든 단일 문자를 일치시킵니다.예:. 또는'kan가 포함된 행을 찾으면 다음 모드를 사용할 수 있습니다.
    grep "kangaroo$" file.txt
  • roo괄호에 포함되지 않은 단일 문자를 일치시킵니다. 다음 모드에서는 [ ],accept등과 같은 문자열이 포함된 임의의 그룹과 일치하지만 accent,
    grep "kan..roo" file.txt
    이 포함된 행은 일치하지 않습니다.
  • 다음 문자의 특수한 의미를 바꾸려면 [^ ] 기호를 사용합니다.

    정규 표현식 확장

    모드를 확장 정규 표현식으로 해석하려면 co(any_letter_except_l)a 또는 coca 옵션을 사용합니다.확장 정규 표현식은 모든 기본 문자 및 기타 문자 문자를 포함하여 더욱 복잡하고 강력한 검색 모드를 만듭니다.다음은 몇 가지 예입니다.
  • 주어진 파일의 모든 전자 메일 주소를 일치시키고 추출합니다.
    grep "acce[np]t" file.txt
  • 주어진 파일의 모든 유효한 IP 주소를 일치시키고 추출합니다.
    grep "co[^l]a" file.txt
  • cobalt 옵션은 피치 문자열 인쇄에만 사용됩니다.

    여러 문자열 검색 (모드)

    or 연산자cola를 사용하여 두 개 이상의 검색 모드를 연결할 수 있습니다.(adsbygoogle=window.adsbygoogle | |[]).푸시({});기본적으로, \ 패턴을 기본 정규 표현식으로 해석하고, -E 등 원 문자는 특수한 의미를 잃고 반사봉 버전을 사용해야 한다.다음 예제에서는 Nginx log 에 나오는 모든 단어 --extended-regexp, -o| 를 검색하고 있습니다.
    오류 파일:
    grep -E -o "\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
    확장 정규 표현식 옵션 grep 을 사용하는 경우 연산자 | 를 다음과 같이 변환해서는 안 됩니다.
    grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file.txt

    일치 전 인쇄 행

    행과 일치하기 전에 특정 수량의 행을 인쇄하려면 fatal (또는 error 옵션을 사용하십시오.예를 들어, 행 일치 전에 선행 컨텍스트 다섯 줄을 표시하려면
    grep 'fatal\|error\|critical' /var/log/nginx/error.log

    일치 후 행 인쇄

    행 일치 이후에 특정 수의 행을 인쇄하려면 critical(또는 -E 옵션을 사용합니다.예를 들어, 행과 일치하는 다음 명령을 사용하여 컨텍스트에 따라 다섯 줄을 표시하려면
    grep -E 'fatal|error|critical' /var/log/nginx/error.log

    결론

    | 명령을 사용하여 파일 내부의 패턴을 검색할 수 있습니다.일치하는 항목을 찾으면grep는 지정한 모드를 포함하는 줄을 인쇄합니다.Grep에 대해 더 알아야 할 내용이 많으니 전화Grep User’s Manual
    페이지질문이나 피드백이 있으면 언제든지 의견을 발표하십시오.