>  기사  >  php教程  >  Linux 기본 명령 텍스트 필터링 grep

Linux 기본 명령 텍스트 필터링 grep

高洛峰
高洛峰원래의
2016-11-08 14:49:381191검색

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의 강력한 필터링 기능은 다양한 옵션과 정규 표현식의 조합에서 비롯됩니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.