grep 정규 표현 식 과 일치

5327 단어 shell정규 표현
1. 전형 적 인 응용 장소: grep, egrep 검색 텍스트 줄
       - E 옵션 이 없 는 grep 를 사용 할 때 기본 정규 매 칭 을 지원 합 니 다.예 를 들 어 'abc' 키워드 검색, '^ abc' 는 줄 의 첫 번 째 와 일치 하고 'abc $' 는 줄 의 끝 과 일치 합 니 다.
grep 'bash' /etc/passwd        #输出包含bash的行

grep '^r'  /etc/passwd         #匹配以r开头的行

grep 'in$' /etc/passwd         #匹配以in结尾的行

여러 조건 을 검색 하면 예 를 들 어 'root' 또는 'daemon' 으로 시작 하 는 줄 을 출력 하거나 기본 정규 에서 '|' 은 '\|' 로 바 꿔 야 합 니 다.
grep  '^root|^daemon'  /etc/passwd          #搜索无结果

grep  '^root\|^daemon'  /etc/passwd         #正确获得结果

grep - E 또는 egrep 명령 을 사용 하면 확장 정규 일치, '|' 등 정규 표현 식 의 특수 문 자 를 자동 으로 식별 할 수 있 습 니 다. 예 를 들 어:
grep -E '^root|^daemon'  /etc/passwd

egrep '^root|^daemon'  /etc/passwd

2. grep, egrep 명령 의 - q 옵션
    옵션 - q  quiet (침묵) 의 뜻 을 표시 합 니 다. 이 옵션 을 사용 하면 출력 대신 검색 만 할 수 있 습 니 다. 보통 스 크 립 트 에서 찾 는 대상 이 존재 하 는 지 여 부 를 식별 합 니 다.
상태 로 돌아 가기%?무관 한 텍스트 정 보 를 무시 하고 스 크 립 트 출력 을 간소화 할 수 있 음 을 판단 합 니 다.
    시스템 에 www 사용자 정보 가 있 는 지 확인 하고 존재 하면 YES 를 표시 합 니 다. 그렇지 않 으 면 NO 를 출력 합 니 다.
[root@localhost ~]# grep 'www' /etc/passwd && echo "YES" || echo "NO"
www:x:1002:1002::/home/www:/sbin/nologin
YES

더하기 - q 옵션 후:
[root@localhost ~]# grep -q 'www' /etc/passwd && echo "YES" || echo "NO"
YES

출력 정 보 를 무시 하고 판단 결과 만 표시 하 며 쉽게 식별 할 수 있 습 니 다. - q 옵션 의 효과 와 사용 & > /dev/null 유사
3. - c 옵션, 출력 에 일치 하 는 줄 수
사용자 중 로그 인 셸 이 "/sbin/nologin"인 사용자 개 수 를 통계 합 니 다.
[root@localhost ~]# grep -c 'sbin/nologin$' /etc/passwd
48

   - c 옵션 을 통 해 일치 하 는 줄 수 를 출력 할 수 있 습 니 다. wc - l 의 효과 와 같 지만 쓰기 가 간단 합 니 다. 예 를 들 어 로그 인 가능 한 시스템 의 사용자 개 수 를 통계 합 니 다.
[root@localhost ~]# grep -c '/bin/bash' /etc/passwd
4

혹은
[root@localhost ~]# grep '/bin/bash' /etc/passwd | wc -l
4

4. 기본 문자
  ". "       임의의 단일 문자 일치
출력/etc/rc. local 파일 에는 빈 줄 이 아 닌 최소한 한 글자 의 줄 이 포함 되 어 있 습 니 다.
[root@localhost ~]# grep '.' /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local

출력 빈 줄 (- v 반대):
[root@localhost ~]# grep -v '.' /etc/rc.local 


위 에서 빈 줄 을 취 하 는 작업 은 아래 작업 효과 와 같 습 니 다.
[root@localhost ~]# grep '^$' /etc/rc.local 


+ 、?、*      목표 출현 횟수
출력 은 "f"를 포함 하 는 줄, 즉 "f"가 한 번 이상 나타 납 니 다.
[root@localhost ~]# egrep 'f+' /etc/rc.local 
# to run scripts during boot instead of using this file.
# this script will NOT be run after all other services.

init, initial 을 포함 하 는 줄 을 출력 합 니 다. 즉, 끝의 'ial' 이 최대 한 번 나타 납 니 다.
[root@localhost ~]# egrep 'init(ial)?' /etc/rc.local
 # This script will be executed *after* all the other init scripts.
 # You can put your own initialization stuff in here if you don't
 # want to do the full Sys V style init stuff.

출력 은 stu, stuf, stuff, stuff f 를 포함 합 니 다.대상 이 한 글자 만 중복 되 었 을 때 괄호 를 사용 하지 않 아 도 됩 니 다.
[root@localhost ~]# egrep 'stuf*' /etc/rc.local
# You can put your own initialization stuff in here if you don't
 # want to do the full Sys V style init stuff.

모든 줄 을 출력 합 니 다. 단독 '. *' 은 임의의 줄 과 일치 할 수 있 습 니 다 (빈 줄 포함).
[root@svr5 ~]# egrep '.*' /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

출력/etc/passwd 에서 'r' 로 시작 하고 'nologin' 으로 끝 나 는 줄:
[root@localhost ~]# egrep '^r.*nologin$' /etc/passwd
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

{ }           출현 횟수 범 위 를 한정 하 다
egrep '(ab){3}' a.txt          #输出ab连续出现三次的行,即ababab

egrep '(ab){2,4}' a.txt        #输出ab连续出现2~4次的行,即abab,ababab,abababab

egrep '(ab){3,}' a.txt         #输出ab至少出现三次的行,即ababab,abababab,……

[ ]        일치 하 는 범위 내의 단일 문자
출력 은 abc, abd 를 포함 하 는 줄, 즉 앞의 두 문 자 는 ab 이 고 세 번 째 문 자 는 c, d 중 하나 면 조건 에 부합 합 니 다.
egrep 'ab[cd]' a.txt

알파벳 이 아 닌 줄 을 출력 합 니 다.
egrep '[^a-zA-Z]' a.txt

\      단어 경계
출력/etc/rc. local 에 단어 'init' 줄 이 포함 되 어 있 습 니 다. initialization 은 요구 에 맞지 않 습 니 다.
[root@localhost ~]# egrep '\' /etc/rc.local
# This script will be executed *after* all the other init scripts.
# want to do the full Sys V style init stuff.

"ll"로 끝 나 는 단어의 줄 을 출력 합 니 다.\> 단어 오른쪽 경계 와 일치 하 는 단 어 를 사용 하 십시오.
 [root@localhost ~]# egrep 'll\>' /etc/rc.local
 # This script will be executed *after* all the other init scripts.
 # want to do the full Sys V style init stuff.

 

좋은 웹페이지 즐겨찾기