집 >운영 및 유지보수 >리눅스 운영 및 유지 관리 >Linux 명령 grep 소개
1. 기능
Linux 시스템의 grep 명령은 정규식을 사용하여 텍스트를 검색하고 일치하는 줄을 인쇄할 수 있는 강력한 텍스트 검색 도구입니다. grep의 전체 이름은 Global Regular Expression Print이며, 이는 전역 정규식 버전이 모든 사용자에게 적용된다는 의미입니다.
2. 형식
grep [옵션]
3. 주요 매개변수
[옵션] 주요 매개변수:
-c: 일치하는 행의 개수만 출력합니다.
-I: 대소문자를 구분하지 않습니다(단일 문자에만 적용 가능).
-h: 여러 파일을 쿼리할 때 파일 이름을 표시하지 않습니다.
-l: 여러 파일을 쿼리할 때 일치하는 문자가 포함된 파일 이름만 출력됩니다.
-n: 일치하는 줄과 줄 번호를 표시합니다.
-s: 존재하지 않거나 일치하는 텍스트가 없는 오류 메시지를 표시하지 않습니다.
-v: 일치하는 텍스트가 포함되지 않은 모든 줄을 표시합니다.
패턴 정규식 주요 매개변수:
: 정규식에서 특수 문자의 원래 의미를 무시합니다.
^: 정규식의 시작 줄과 일치합니다.
$: 정규 표현식의 끝 줄과 일치합니다.
<: 정규식과 일치하는 줄부터 시작합니다.
>: 정규식과 일치하는 줄의 끝으로 이동합니다.
[ ]: [A]와 같은 단일 문자, 즉 A가 요구 사항을 충족합니다.
[-]: [A-Z]와 같은 범위, 즉 A, B, C ~ Z가 모두 요구 사항을 충족합니다.
. : 모든 단일 문자입니다.
*: 문자가 있으며, 길이는 0이 될 수 있습니다.
4. grep 명령을 사용한 간단한 예
$ grep 'test' d*
d로 시작하는 파일에서 test가 포함된 모든 줄을 표시합니다.
$ grep 'test' aa bb cc
aa, bb, cc 파일에서 test와 일치하는 줄을 표시합니다.
$ grep '[a-z]{5}' aa
각각 최소 5개의 연속된 소문자가 있는 문자열을 포함하는 모든 줄을 표시합니다.
$ grep 'w(es)t.*1′ aa
west가 일치하면 es는 메모리에 저장되고 1로 표시된 다음 임의 개수의 문자(.*)와 다음 문자를 검색합니다. 또 다른 es(1)을 찾으면 해당 행이 표시됩니다. egrep 또는 grep -E를 사용하는 경우 "" 기호로 이스케이프할 필요가 없으며 'w(es)t.*1'로 직접 작성하면 됩니다.
5.grep 명령 사용법의 복잡한 예
'/usr/src/Linux/Doc' 디렉토리에서 'magic' 문자열이 있는 파일을 검색한다고 가정합니다:
$ grep Magic /usr/src/Linux/ Doc/ *
sysrq.txt:* 마법의 SysRQ 키를 어떻게 활성화합니까?
sysrq.txt:* 마법의 SysRQ 키를 어떻게 사용합니까?
'sysrp.txt' 파일에 이 문자열이 포함되어 있습니다. 논의는 SysRQ의 기능입니다.
기본적으로 'grep'은 현재 디렉터리만 검색합니다. 이 디렉토리 아래에 하위 디렉토리가 많은 경우 'grep'은 다음과 같이 나열합니다.
grep: sound: Is a 디렉토리
이렇게 하면 'grep'의 출력을 읽기 어려울 수 있습니다. 여기에는 두 가지 해결 방법이 있습니다.
명시적으로 하위 디렉터리 검색을 요청: grep -r
또는 하위 디렉터리 무시: grep -d Skip
출력이 많으면 'less'로 파이프할 수 있습니다. 읽기:
$ grep Magic /usr/src/Linux/Documentation/* | less
이렇게 하면 더 편리하게 읽을 수 있습니다.
한 가지 주의할 점은 파일 필터링 방법을 제공해야 한다는 것입니다(모든 파일을 검색하려면 * 사용). 잊어버린 경우 'grep'은 프로그램이 중단될 때까지 기다립니다. 이 문제가 발생하면
아래에는 몇 가지 흥미로운 명령줄 매개변수가 있습니다.
grep -i 패턴 파일: 대소문자를 구분하지 않고 검색합니다. 기본값은 대소문자를 구분합니다.
grep -l 패턴 파일: 일치하는 파일 이름만 나열됩니다.
grep -L 패턴 파일: 일치하지 않는 파일 이름을 나열합니다.
grep -w 패턴 파일: 전체 단어만 일치합니다. 문자열의 일부보다(예: 'magic'이 아닌 'magic' 일치),
grep -C 숫자 패턴 파일: 일치하는 컨텍스트는 각각 [number] 줄을 표시합니다.
grep Pattern1 패턴2 파일: 패턴1과 일치하는 줄을 표시합니다. 또는 패턴2,
grep 패턴1 파일 | grep 패턴2: 패턴1과 패턴2 모두와 일치하는 행을 표시합니다.
grep -n 패턴 파일은 줄 번호 정보를 표시할 수 있습니다.
grep -c 패턴 파일은 총 줄 수를 찾을 수 있습니다.
검색을 위한 몇 가지 특수 기호도 있습니다.
< 단어의 끝 끝.
예:
grep man *은 'Batman', 'manic', 'man' 등과 일치합니다.
grep ' grep ' '^': 일치하는 문자열이 줄의 시작 부분에 있음을 의미합니다. '$': 일치하는 문자열이 줄의 끝에 있음을 의미합니다. Grep 명령 사용 가이드 1. -I: 대소문자 무시 -c: 일치하는 줄 수 인쇄 -l: 여러 파일에서 일치하는 줄 찾기 -v: 일치하는 항목이 포함되지 않은 줄 찾기 -n: 줄 및 인쇄 일치하는 항목이 포함된 줄 레이블 2. RE(정규식) 정규식에서 특수 문자의 원래 의미를 무시합니다. ^ 정규식의 시작 줄과 일치합니다. $ 정규식의 끝 줄과 일치합니다. < 일치하는 정규 표현식에서 표현식 줄 시작 > 정규 표현식과 일치하는 줄 끝까지 [ ] [A]와 같은 단일 문자는 A가 요구 사항을 충족함을 의미합니다. [ - ] 범위는 A, B, C를 의미합니다. Z는 모두 요구 사항을 충족합니다. . 모든 단일 문자 * 모든 문자, 길이는 0 3일 수 있습니다. 예: # ps -ef | grep in.telnetd root 19955 181 0 13:43:53 ? 0:00 in.telnetd # 더 많은 size.txt 크기 파일 내용 b124230 b034325 a081016 m7187998 m7282064 a0 22021 a061048 m9324822 b103303 a013386 b044525 m8987131 B081016 M45678 B103303 BADc2345 # more size.txt | grep '[a-b]' 범위(예: A, B, C) Z까지 모두 충족 요구 사항 b124230 b034 325 a081016 a022021 a061048 b103303 a013386 b044525 # 추가 size.txt | grep '[a-b]'* b124230 b034325 a081016 m7187998 m7282064 a022021 a061048 m9324822 b103303 a013386 b044525 m8987131 B081016 M45678 B103303 BADc2345 # 더보기 size.txt | ' [A]와 같은 단일 문자, 즉 A는 요청과 일치합니다. b034325 b103303 b044525 # more size.txt | b034325 b103303 b044525 B081016 B103303 BADc2345 # grep 'root' /etc/group root::0:root bin::2:root,bin, 데몬 sys::3 :루트,bin,sys,adm adm::4: 루트,adm,데몬 uucp::5:루트,uucp mail::6:루트 tty::7:루트,tty,adm lp::8:root,lp,adm nuucp ::9:root,nuucp daemon::12:root,daemon # grep '^root' /etc/group은 정규식 root::0:root # grep 'uucp ' /etc/group uucp::5:root,uucp nuucp::9:root,nuucp # grep ' uucp::5:root,uucp # grep 'root$' /etc/group은 정규 표현식의 끝 줄과 일치합니다. root::0:root mail::6:root # 추가 size.txt | grep -i 'b1..*3 ' -i : 대소문자 무시 b124230 b103303 B103303 # 추가 size.txt | -v : 일치하는 항목이 포함되지 않은 줄 찾기 b034325 a0 81016 m7187998 m7282064 a022021 a061048 m9324 822 a013386 b044525 m8987131 B081016 M45678 BADc2345 # 추가 size.txt | grep -in 'b1..*3' 1:b124230 9:b103303 15:B103303 # grep '$' /etc/init.d/nfs.server | wc -l 128 # grep '$' /etc/ init.d/nfs.server | wc –l 정규식에서 특수 문자의 원래 의미를 무시합니다. 15 # grep '$' /etc /init.d/nfs.server case "$1" in >/tmp/sharetab.$$ [ "x$fstype" != xnfs ] && echo "$patht$rest$fstypet$ optst$desc" >>/tmp/sharetab.$ $ /usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$ /usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)' if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] && if [ $startnfsd -ne 0 ]; then elif [ ! -n "$_INIT_RUN_LEVEL" ]; gt 0 ]; do wtime=`expr $wtime - 1` if [ $wtime -eq 0 ]; then echo "사용법: $0 { start | stop }" # 더 많은 size.txt 테스트 파일 그들은 파일입니다 끝 # grep 'the' size.txt 테스트 파일 그들은 파일입니다 # grep 'the' size.txt 테스트 파일 their # grep 'the>' size.txt 테스트 파일 # grep ' # grep '<[Tt]he>' .txt 테스트 파일 ====== =================================== =============== =========== 1,소개 정규식을 사용하는 다목적 텍스트 검색 도구입니다. 이 php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag"> 명령은 원래 ed 행 편집기 A에 있습니다. php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">명령/필터: g/re/p -- 전역 - 정규식 - 인쇄 . 기본 형식 grep 패턴 [파일...] (1)grep 검색 문자열 [파일 이름] (2)grep 정규 표현식 [파일 이름] 파일에서 패턴의 모든 항목을 검색합니다. 패턴은 다음 중 하나일 수 있습니다. 검색할 문자열 또는 정규식 참고: 검색할 문자열을 입력할 때는 큰따옴표/를 사용하는 것이 가장 좋으며, 패턴 일치를 위해 정규식을 사용할 때는 작은따옴표를 사용하는 데 주의하세요 2, grep 옵션 -c는 일치하는 줄 수만 출력합니다. -i는 대소문자를 구분하지 않습니다(단일 문자의 경우). -n 일치하는 줄 번호를 표시합니다. -v는 일치하는 줄을 표시하지 않습니다. 모든 텍스트 줄 - s는 오류 메시지를 표시하지 않습니다 -E는 확장 정규식을 사용합니다 더 많은 옵션을 보려면 다음을 참조하세요. man grep 3, 일반적으로 사용되는 grep 예제 (1) 여러 파일 쿼리 grep "sort" *.doc # 파일 이름 일치 보기 (2) 줄 일치: 일치하는 줄 수 출력 grep -c "48" data.doc # 문서에서 48자를 포함하는 줄 수 출력 (3) 일치하는 줄 표시 및 줄 번호 grep -n "48" data.doc # 48과 일치하는 모든 줄과 줄 번호 표시 (4) 일치하지 않는 줄 표시 grep -vn "48" doc # 일치하는 모든 줄을 출력합니다. not contain 48 (4) 일치하지 않는 행 표시 grep -vn "48" data.doc # 48 (5) 대소문자 구분 grep - i "ab" 데이터를 포함하지 않는 모든 행을 출력합니다. doc #ab 또는 Ab 문자열을 포함하는 모든 줄을 출력 4, 정규식 적용 (1) 정규식 적용 (참고: 괄호로 묶인 정규식에는 작은따옴표를 사용하는 것이 가장 좋습니다) grep '[239] .' data.doc # 2, 3 또는 9로 시작하고 두 개의 숫자인 모든 행을 출력합니다 (2) 불일치 테스트 grep '^[^ 48]' data.doc # 첫 번째 행이 다음과 같은 행과 일치하지 않음 48 (3) 확장 패턴 매칭 사용 grep -E '219|216' data.doc (4) ... 이 내용이 필요합니다. 지속적으로 실습에 적용하고 요약하며 정규식을 능숙하게 마스터하세요. . 5, 클래스 이름 사용 국제 패턴 일치를 위해 클래스 이름을 사용할 수 있습니다: [[:upper:]] [A-Z] [[:lower:]] [a-z] [[:digit :] ] [0-9] [[:alnum:]] [0-9a-zA-Z] [[:space:]] 공백 또는 탭 [[:alpha:]] [a- zA- Z] (1) grep '5[[:upper:]][[:upper:]]' data.doc 사용 #5로 시작하고 두 개의 대문자로 끝나는 줄을 쿼리 위 내용은 Linux 명령 grep 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!