1. 기능
리눅스 시스템의 grep 명령은 정규식을 사용하여 텍스트를 검색하고 일치하는 줄을 인쇄할 수 있는 강력한 텍스트 검색 도구입니다. grep의 전체 이름은 Global Regular Expression Print이며, 이는 전역 정규식 버전이 모든 사용자에게 적용된다는 의미입니다.
2. 형식
grep [options]
3. 주요 매개변수
[options] 주요 매개변수:
-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'로 직접 작성하면 됩니다. sysrq.txt:* 매직 SysRQ 키를 어떻게 활성화하나요?
sysrq.txt:* 매직 SysRQ 키를 어떻게 사용하나요?
where file 'sysrp. txt 'SysRQ의 기능을 설명하는 이 문자열이 포함되어 있습니다.
기본적으로 'grep'은 현재 디렉터리만 검색합니다. 이 디렉터리 아래에 하위 디렉터리가 많은 경우 'grep'은 다음과 같이 목록을 표시합니다.
grep: sound: Is a 디렉터리
이렇게 하면 'grep'의 출력을 읽기 어려울 수 있습니다. 여기에는 두 가지 해결 방법이 있습니다.
하위 디렉터리 검색을 명시적으로 요청: grep -r
또는 하위 디렉터리 무시: grep -d 건너뛰기
출력이 많으면 'less'로 파이프할 수 있습니다. 읽으려면:
$ grep Magic /usr/src/Linux/Documentation/* | less
이렇게 하면 더 편리하게 읽을 수 있습니다.
한 가지 주의할 점은 파일 필터링 방법을 제공해야 한다는 것입니다(모든 파일을 검색하려면 * 사용). 잊어버린 경우 'grep'은 프로그램이 중단될 때까지 기다립니다. 이 문제가 발생하면
아래에는 몇 가지 흥미로운 명령줄 매개변수가 있습니다.
grep -l 패턴 파일: 일치하는 파일 이름만 나열됩니다.
grep -L 패턴 파일: 일치하지 않는 파일 이름이 나열됩니다.grep -w 패턴 파일: 일치하는 파일 이름만 나열됩니다. 문자열의 일부가 아닌 전체 단어(예: 'magic'이 아닌 'magic'과 일치),
grep -C 숫자 패턴 파일: 일치하는 컨텍스트는 각각 [number]줄을 표시합니다.
grep Pattern1 | : 패턴1 또는 패턴2와 일치하는 행 표시,
grep Pattern1 파일 | grep Pattern2: 패턴1과 패턴2 모두 일치하는 행 표시.
grep -n 패턴 파일은 줄 번호 정보를 표시합니다
grep -c 패턴 파일은 총 줄 수를 찾습니다
검색을 위한 몇 가지 특수 기호도 있습니다.
< 및 >는 각각 단어의 시작과 끝을 표시합니다.예:
grep man *은 'Batman', 'manic', 'man' 등과 일치합니다.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
a022021
a061048
m9
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345
# more size.txt | , B, C ~ Z 모두
b124230
b034325
a081016
a022021
a061048
b103303
a013386
b04452 5
#를 충족합니다. 더 많은 크기. txt | grep '[a-b]'*
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m93 24822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345
# 더 많은 size.txt | grep 'b' 단일 문자, 예를 들어 [A]는 A를 의미합니다. 요구 사항 충족
b124230
b034325
b103303
b044525
# more size.txt | grep '[bB]'
b124230
b034325
b103303
b 044525
B081016
B103303
BADc2345
# grep 'root' /etc/group
root::0:root
bin::2:root,bin,daemon
sys: :3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7 :root,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 '
# grep 'root$' /etc/group은 정규 표현식의 끝 줄과 일치합니다.
root::0:root
mail::6:root
# more size.txt grep -i | 'b1..*3' -i : 대소문자 무시
b124230
b103303
B103303
# more size.txt | v : 포함되지 않은 일치 행 찾기
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a01 3386 🎜>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" ] then
while [ $wtime -gt 0 ]; >wtime= `expr $wtime - 1`
if [ $wtime -eq 0 ]; then
echo "Usage: $0 { start | stop }"
# more size.txt
테스트 파일
그들의 파일
끝
# grep 'the' size.txt
테스트 파일
그들의 파일
# grep '
그 파일은
# grep 'the>' size.txt
테스트 파일
# grep '
테스트 파일
# grep '<[Tt]he>' size.txt
테스트 파일
= ================================================= ===============
1, 소개
정규 표현식을 사용하는 다목적 텍스트 검색 도구입니다. 이 php?name=%C3%FC%C1 %입니다. EE" onclick="tagshow(event)" class="t_tag">명령은 원래 ed 줄 편집기 ="t_tag">명령/필터의 php?name=%C3%FC%C1%EE"입니다.
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 #48을 포함하지 않는 모든 줄 출력
(4) 일치하지 않는 줄 표시
grep -vn "48" data.doc #48을 포함하지 않는 모든 줄 출력
(5) 대소문자 구분
grep -i "ab" data.doc #ab 또는 Ab 문자열이 포함된 모든 행을 출력합니다
4, 정규식 적용
(1) 적용 (참고: 정규식을 작은따옴표로 묶는 것이 가장 좋습니다)
grep '[239].' data .doc #2, 3 또는 9로 시작하고 두 개의 숫자인 모든 줄을 출력합니다
(2) 불일치 테스트
grep '^[^48]' data.doc #No 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줄의 쿼리