.png)
Linux의 Grep 명령(파일에서 텍스트 찾기)
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-regexp
및 a-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 expression
grep -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
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페이지질문이나 피드백이 있으면 언제든지 의견을 발표하십시오.