Linux에서 텍스트나 출력 내용을 필터링해야 하는 경우가 많습니다. 가장 일반적으로 사용되는 필터링 명령은 grep입니다.
grep [OPTIONS] PATTERN [FILE...]
grep은 입력 줄에 PATTERN 패턴이 포함된 경우 각 입력 줄을 한 줄씩 검색합니다. , 출력은 이 줄입니다. 여기의 패턴은 정규 표현식입니다(이전 기사를 참조하세요. 이 기사에서는 grep을 예로 사용합니다).
/etc/passwd 파일에서 루트가 포함된 줄을 출력합니다:
[root@centos7 temp]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
또는 표준 입력에서 가져옵니다:
[root@centos7 temp]# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
주의할 사항 is: grep 입력이 파일과 표준 입력 모두에서 오는 경우 grep은 표준 입력을 나타내는 데 - 기호가 사용되지 않는 한 표준 입력의 내용을 무시하고 처리하지 않습니다.
[root@centos7 temp]# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
이때, grep은 어떤 파일이 표준입력에서 어떤 결과가 나오는지 알려줍니다.
/etc/passwd 파일과 /etc/group 파일에서 root로 시작하는 줄을 출력합니다.
[root@centos7 temp]# cat /etc/passwd | grep root /etc/passwd - /etc/passwd:root:x:0:0:root:/root:/bin/bash /etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin (标准输入):root:x:0:0:root:/root:/bin/bash (标准输入):operator:x:11:0:operator:/root:/sbin/nologin
이때 grep은 파일에서 어떤 결과가 나오는지 표시하고 표준 입력에서 오는 것입니다.
/etc/passwd 파일과 /etc/group 파일에서 root로 시작하는 줄을 출력합니다.
[root@centos7 temp]# grep "^root" /etc/passwd /etc/group /etc/passwd:root:x:0:0:root:/root:/bin/bash /etc/group:root:x:0:
/etc/bin/bash로 끝나는 줄을 /etc 파일에서 출력합니다. /passwd:
[root@centos7 temp]# grep "/bin/bash$" /etc/passwd root:x:0:0:root:/root:/bin/bash learner:x:1000:1000::/home/learner:/bin/bash
위의 두 예에서 PATTERN은 셸에서 구문 분석되지 않도록 큰따옴표로 묶었습니다.
/etc/passwd 파일에서 a-s의 문자로 시작하지 않는 행을 출력합니다.
[root@centos7 temp]# grep "^[^a-s]" /etc/passwd tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin
여기서 두 ^, 첫 번째 사이의 다른 의미를 이해해야 합니다. ^는 라인을 나타냅니다. 먼저, [] 안의 두 번째 첫 번째 문자 ^는 부정을 의미합니다.
출력 파일 /etc/passwd에서 문자 0이 연속으로 3번 이상 나타납니다(이스케이프 문자 '' 참고).
[root@centos7 temp]# grep "0\{3,\}" /etc/passwd learner:x:1000:1000::/home/learner:/bin/bash
예를 들어, 출력에서 file /etc/passwd, 문자 r 또는 l로 시작하는 줄:
[root@centos7 temp]# grep "^[r,l]" /etc/passwd root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin learner:x:1000:1000::/home/learner:/bin/bash
옵션 -i는 grep이 패턴 일치 시 대소문자를 무시하도록 합니다.
[root@centos7 temp]# grep -i abcd file ABCD function abcd() { [root@centos7 temp]#
옵션 -o는 출력을 의미합니다. 일치하는 문자만, 반면 전체 줄은 아님:
[root@centos7 temp]# grep -oi abcd file ABCD abcd [root@centos7 temp]#
옵션 -c는 일치하는 줄 수를 계산합니다.
[root@centos7 temp]# grep -oic abcd file 2 [root@centos7 temp]#
옵션 -v는 /etc/와 같은 역방향 일치를 나타냅니다. passwd는 /sbin으로 시작하지 않습니다. /nologin으로 끝나는 줄:
[root@centos7 temp]# grep -v "/sbin/nologin$" /etc/passwd root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt learner:x:1000:1000::/home/learner:/bin/bash
옵션 -f FILE은 FILE 파일의 각 줄을 패턴으로 일치시키는 것을 의미합니다.
[root@centos7 temp]# cat test abcd ABCD [root@centos7 temp]# grep -f test file ABCD function abcd() { [root@centos7 temp]#
Option -x 전체 줄 일치를 의미:
[root@centos7 temp]# grep -xf test file ABCD [root@centos7 temp]#
Option-w는 전체 단어 일치를 의미합니다.
[root@centos7 temp]# grep here file here there [root@centos7 temp]# grep -w here file here [root@centos7 temp]#
Option-h는 여러 파일이 있는 경우 파일 이름을 출력하지 않음을 의미합니다.
[root@centos7 temp]# cat /etc/passwd|grep ^root - /etc/passwd -h root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash
Option-n 행 번호 표시를 나타냅니다.
[root@centos7 temp]# grep -n "^[r,l]" /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 24:learner:x:1000:1000::/home/learner:/bin/bash
옵션 -A N, -B N, -C N은 출력 일치 행과 '주변 행'을 나타냅니다.
-A N 表示输出匹配行和其之后(after)的N行 -B N 表示输出匹配行和其之前(before)的N行 -C N 表示输出匹配行和其之前之后各N行 [root@centos7 temp]# grep -A 2 ^operator /etc/passwd operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@centos7 temp]# grep -B2 ^operator /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin [root@centos7 temp]# grep -C1 ^operator /etc/passwd mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin
옵션 -F는 PATTERN을 리터럴 일치(문자의 특수 의미 무시)로 처리하는 것은 fgrep 명령을 실행하는 것과 같습니다.
[root@centos7 temp]# grep -F ^root /etc/passwd [root@centos7 temp]#
명령에 출력이 없습니다
옵션 -E는 egrep 명령을 실행하는 것처럼 확장 정규식을 사용할 수 있습니다.
[root@centos7 temp]# egrep "^root|^learner" /etc/passwd root:x:0:0:root:/root:/bin/bash learner:x:1000:1000::/home/learner:/bin/bash
확장 정규식을 사용한다는 것은 ?, +, {, |, ( 등 문자의 특별한 의미를 이스케이프 없이 표현할 수 있다는 의미입니다. 그리고).
-P 옵션은 일치를 위해 Perl의 정규 표현식을 사용한다는 의미입니다.
예:
[root@centos7 ~]# echo "helloworld123456"| grep -oP "\d+" 123456 [root@centos7 ~]#
Perl 정규 표현식의 "d"는 숫자를 의미하고 +는 일치를 의미합니다. 한 번 이상(vim과 동일)
옵션 -a는 바이너리 파일을 텍스트 파일로 처리합니다.
[root@centos7 ~]# grep -a online /usr/bin/ls %s online help: <%s> [root@centos7 ~]#
옵션 --exclude=GLOB 및 --include=GLOB는 각각 GLOB와 일치하는 파일을 제외하고 포함한다는 뜻이고, GLOB는 와일드카드를 의미합니다. (find 및 xargs 사용법은 기본 명령 소개 3을 참조하세요.):
[root@centos7 temp]# find . -type f | xargs grep --exclude=*.txt --include=test* bash ./test.sh:#!/bin/bash [root@centos7 temp]#
grep의 강력한 필터링 기능은 다양한 옵션과 정규 표현식의 조합에서 비롯됩니다