어댑터 와 정규 표현 식 문자 의 이해 및 grep 의 인 스 턴 스 응용

어댑터 (glob) 가 무엇 입 니까?
    通配符是Linux shell中用来描述(匹配)不确定字符的特殊符号.

구체 적 인 마스크 가 문 자 를 어떻게 묘사 하 는 지 볼 까요?
    *       代表任意字符任意次数
    ?       代表任意单个字符0次或者1次
    []      代表括号中存在的任意单个字符
    [!]     代表非括号中存在的任意单个字符
    [^]     代表指定范围外的任意单个字符
    [a-z]   代表所有单个小写字母
    [A-Z]   代表所有单个大写字母
    [:digit:]代表所有单个数字
    [:upper:]代表所有单个大写字母
    [:lower:]代表所有单个小写字母
    [:alpha:]代表所有单个字母
    [:blank:]代表水平空格或tab键
    [:space:]代表空格
    [:punct:]代表标点符号
    [:xdigit:]代表十六进制

어댑터 * 의 응용:
    [root@localhost rc.d]# ls  #列出此目录下的所有内容
    init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit
    rc      rc1.d  rc3.d  rc5.d  rc.local
    [root@localhost rc.d]# ls rc.*   #列出此目录下所有以rc.开头任意长度字符结尾的文件
    rc.local  rc.sysinit

어댑터의 응용 프로그램:
    [root@localhost rc.d]# ls r?  #列出以r开头后面紧跟任意单个字符结尾,可与*对照之
    rc

어댑터 [] 의 응용:
    [root@localhost rc.d]# mkdir b  #创建目录b
    [root@localhost rc.d]# ls       #查看目录内容
    b       rc     rc1.d  rc3.d  rc5.d  rc.local
    init.d  rc0.d  rc2.d  rc4.d  rc6.d  rc.sysinit
    [root@localhost rc.d]# ls -d  [ib]*  #以i或者b开头的目录
    b  init.d
        注意的是: [[?*\] 指的是匹配"[","?","\","三个字符中的一个并不代表通配符
                 [][!] 指的同样也是中间的三个字符

어댑터 [!] 의 응용:
    [root@localhost rc.d]# ls -d [!ib]*  #i或者b开头的目录
    rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  rc.sysinit

어댑터 [^] 의 응용:
    效果与[!]相同

어댑터 [: alpha:] 의 응용
    效果类似于[]基本相似,只不过匹配内容是描述符所描述的含义

셸 의 어댑터 와 다른 설명자 가 있 습 니까?
정규 표현 식 의 문 자 는 두 가지 로 나 눌 수 있 습 니 다. 텍스트 문자 와 메타 문자 입 니 다. 정규 표현 식 은 기본 정규 표현 식 과 확장 정규 표현 식 으로 나 눌 수 있 습 니 다.
* centos 정규 표현 식 의 지원 은 perl PCR 모듈 에 의존 합 니 다.
메타 문자 (metacharacter): 정규 표현 식 에서 특별한 의 미 를 가 진 문자 로 정규 표현 식 이 파일 처리 능력 을 가지 게 합 니 다.
1. 문자 자체 설명
    \       转义字符(跳脱字符)其后的字符还原为本来的含义,不做特殊字符
    .       代表任意单个字符
    []      代表括号中指定的任意单个字符
    [^]     代表除括号中指定的任意单个字符
    [:alnum:]代表所有的数字和字母中的任意单个字符
    [:digit:]代表所有数字中的任意单个字符
    [:alpha:]代表所有英文字母中的任意单个字符
    [:lower:]代表所有小写英文字母中的任意单个字符
    [:upper:]代表所有大写英文字母中的任意单个字符
    [:space:]代表空格
    [:punct:]代表标点符号
    [:blank:]代表水平空格或tab键

2. 문자 발생 횟수 설명
  基本正则:
    *       代表前面单个字符或字符串(分组)出现任意次
    \?      代表前面单个字符或字符串(分组)出现零次或一次
    \+      代表前面单个字符或字符串(分组)出现至少一次
    \{n\}   代表前面单个字符或字符串(分组)出现n次
    \{m,n\} 代表前面单个字符或字符串(分组)至少出现m次至多出现n次
    \{m,\}  代表前面单个字符或字符串(分组)至少出现m次多则不限
    \{,n\}  代表前面单个字符或字符串(分组)至多出现n次少则不限
  扩展正则:
    *       代表前面单个字符或字符串(分组)出现任意次
    ?       代表前面单个字符或字符串(分组)出现零次或一次
    +       代表前面单个字符或字符串(分组)出现至少一次
    {n}     代表前面单个字符或字符串(分组)出现n次
    {m,n}   代表前面单个字符或字符串(分组)至少出现m次至多出现n次
    {m,}    代表前面单个字符或字符串(分组)至少出现m次多则不限
    {,n}    代表前面单个字符或字符串(分组)至多出现n次少则不限

3. 문자 의 위치 설명 (위치 고정)
    ^       代表以紧跟其后的字符开头的行
    $       代表以紧跟其后的字符结尾的行
    \      代表以紧跟其后的字符或字符串做单词的结尾
    \   代表以中间字符或字符串为整个单词
    \b \b   是\c \>的另一种表示方法
    分组 () 多个字符括起来作为一个整体字符串使用
几个常用组合:
    ^$代表空行
    .*代表任意字符出现任意次

grep 명령 간단 한 용법: 텍스트 에 필요 한 키 워드 를 검색 합 니 다.
 grep  [OPTIONS] PATTERN [FILE...]
 grep  [OPTIONS] [-e PATTERN | -f FILE] [FILE...] 
    -i      忽略关键字大小写
    -n      显示搜索到的内容在原文件中的行
    -v      取反显示;显示没有匹配到的行
    -c      显示匹配到内容多少行
    -o      仅显示匹配到的字符串 
    -An     显示匹配到的内容的行及后n行
    -Bn     显示匹配到的内容的行及前n行
    -Cn     显示匹配到的内容的行及前后n行
    -e      指定多个关键字
        grep -e "root" -e "ntp" /etc/passwd
    -w      显示匹配到内容的单词数
    -E      使用扩展的正则表达式相当于egrep

메타 문자 적용:
1./etc/rc. d/rc. local 의\# 시작 과 빈 줄 을 삭제 합 니까?
    [root@localhost rc.d]# cat 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
    [root@localhost rc.d]# cat rc.local | egrep -v ^$ | grep -v ^#
    touch /var/lock/subsys/local
    简化:
    [root@localhost rc.d]# cat rc.local  | grep  -v -E  "^#|^$" 
    touch /var/lock/subsys/local

2. ifconfig 의 ip 주소 꺼 내기
    [root@localhost rc.d]# ifconfig  | egrep -o -E  \([0-2]?[0-9]?[0-9]\.\){3}[0-9]+|head -1
    172.16.253.171
    简化:
    [root@localhost rc.d]# ifconfig | egrep -o  "([0-9]+\.){3}[0-9]+"|head -1 
    172.16.253.171
    另一种方法:
    [root@localhost rc.d]# ifconfig|grep "inet addr" | cut -d: -f2 | cut -d" " -f1|
    head -1
    172.16.253.171

3./etc/passwd 에서 사용자 이름과 셸 밍 이 같은 것 을 찾 습 니까?
    [root@localhost rc.d]# cat /etc/passwd |grep --color=auto -E "(^[[:alnum:]]+):.*\1$"
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt

4./var 디 렉 터 리 에 있 는. log 로 끝 나 는 모든 파일 의 경 로 를 찾 습 니까?
    [root@localhost rc.d]# find  /var -name *.log | grep -o -E "/.*/" | uniq
    /var/log/audit/
    /var/log/gdm/
    /var/log/tuned/
    /var/log/anaconda/
    /var/log/
    /var/log/mariadb/
    /var/log/

5.....................................................................
    [root@localhost rc.d]# find  /var -name *.log      # 查找出/var下所有的.log结尾的文件
    /var/log/audit/audit.log
    /var/log/gdm/:1.log
    /var/log/gdm/:0-greeter.log
    /var/log/gdm/:0.log
    /var/log/tuned/tuned.log
    /var/log/anaconda/anaconda.log
    /var/log/anaconda/X.log
    /var/log/anaconda/program.log
    /var/log/anaconda/packaging.log
    /var/log/anaconda/storage.log
    /var/log/anaconda/ifcfg.log
    /var/log/anaconda/ks-script-jwlu_8.log
    /var/log/anaconda/journal.log
    /var/log/vmware-vmsvc.log
    /var/log/Xorg.9.log
    /var/log/wpa_supplicant.log
    /var/log/yum.log
    /var/log/vmware-vmusr.log
    /var/log/mariadb/mariadb.log
    /var/log/Xorg.0.log
    /var/log/pm-suspend.log
    /var/log/pm-powersave.log
    /var/log/boot.log
    [root@localhost rc.d]# find  /var -name *.log  | grep -o -E "[^/]*$"   #正则取出基名
    audit.log
    :1.log
    :0-greeter.log
    :0.log
    tuned.log
    anaconda.log
    X.log
    program.log
    packaging.log
    storage.log
    ifcfg.log
    ks-script-jwlu_8.log
    journal.log
    vmware-vmsvc.log
    Xorg.9.log
    wpa_supplicant.log
    yum.log
    vmware-vmusr.log
    mariadb.log
    Xorg.0.log
    pm-suspend.log
    pm-powersave.log
    boot.log

6./proc/meminfo 파일 에서 대문자 나 소문 자로 시작 하 는 모든 줄 을 찾 습 니 다. 두 가지 방식:
    [root@localhost rc.d]# cat /proc/meminfo  |grep -E "^[s|S].*"
    SwapCached:            0 kB
    SwapTotal:       2097148 kB
    SwapFree:        2097148 kB
    Shmem:              9132 kB
    Slab:             148756 kB
    SReclaimable:      88588 kB
    SUnreclaim:        60168 kB
    [root@localhost rc.d]# cat /proc/meminfo  |egrep -i "^s.*"
    SwapCached:            0 kB
    SwapTotal:       2097148 kB
    SwapFree:        2097148 kB
    Shmem:              9132 kB
    Slab:             148756 kB
    SReclaimable:      88588 kB
    SUnreclaim:        60168 kB

7./sbin/nologin 을 셸 로 하지 않 는 사용 자 를 검색 하고 이 사용자 정보 가 원본 파일 에 있 는 줄 번 호 를 표시 합 니까?
    [root@localhost ~]# egrep  -n -v  "\ 
  

8.检索shutdown用户,并显示上下1行的内容?

    [root@localhost logs]# egrep  -C1 "^shutdown" /etc/passwd 
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt

9. 주 ID (UID), 그룹 ID (GID) 와 같은 사용 자 를 검색 합 니까?
    [root@localhost logs]# egrep  "\:\1" /etc/passwd|cut -d: -f1
    root
    bin
    daemon
    nobody
    systemd-bus-proxy
    systemd-network
    dbus
    abrt
    tss
    rpc
    usbmuxd

잘못 이 있 으 면 잘 부탁드립니다.
'구시 가지 소설' 의 개인 블 로그:http://cityx.blogcitys.com

좋은 웹페이지 즐겨찾기