正則介紹_grep

正則表達式介紹-grep(過濾指定關鍵詞)

egrep使用時,不須要添加脫義字符\

概念:它使用單個字符串來描述或匹配一系列符合某個句法則規則的字符串;
正則表示式一般用來檢索和替換那些符合某個模式的文本內容。
不管是查找某個文檔,仍是查詢某個日誌文件並分析其內容,都會用正則表示式。
正則就是一串有規則的字符串;
掌握好正則對於編寫shell腳本有很大幫助;
各類變成語言中都有正則,原理是同樣的。
命令格式:grep [-cinvrABC] 'word' filename
經常使用選項以下:
-c 表示打印符合要求的行數;
-i 表示忽略大小寫;
-n 表示輸出符合要求的行及其行號;
-v 表示打印不符合要求的號;
-r 遍歷全部的子目錄
-A 後面跟一個數字,例如-A2表示打印符合要求的行及下面的兩行;
-B 後面跟一個數字,例如-B2表示打印符合要求的行及上面的兩行;
-C 後面跟一個數字,例如-C2表示打印符合要求的行及上下各兩行。
^ 這個符號表示以什麼什麼開頭。如:^# 以#開頭;
或者[^#] 取反,除#號開頭的行
  • 建立一個grep目錄,拷貝過來一個文件/etc/passwd

    [root@localhost /]# mkdir grep #建立一個grep目錄
    [root@localhost /]# cd /grep/ #進這個目錄裏面
    [root@localhost grep]# cp /etc/passwd . #拷貝passwd到.(本目錄下)
    [root@localhost grep]# ls #查看目錄下有什麼文件
    passwd正則表達式

  • 過濾passwd文件裏,nologin的字符shell

    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)
    這裏nologin過濾完後標紅,是由於grep有一個--color=auto 添加顏色顯示
    能夠查看下grep命令
    [root@localhost grep]# which grep #which查看grep
    alias grep='grep --color=auto'
    /usr/bin/grepbash

  • grep查看符合要求的行數 -c

    [root@localhost grep]# grep -c 'nologin' passwd #-c符合’nologin'的行數
    15ssh

  • grep顯示這個文件包包含‘nologin'的行數。post

    [root@localhost grep]# grep -n 'nologin' passwd 
    2:bin:x:1:1:bin:/bin:/sbin/nologin
    3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10:operator:x:11:0:operator:/root:/sbin/nologin
    11:games:x:12:100:games:/usr/games:/sbin/nologin
    12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13:nobody:x:99:99:Nobody:/:/sbin/nologin
    14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15:dbus:x:81:81:System message bus:/:/sbin/nologin
    16:polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    17:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    19:chrony:x:998:996::/var/lib/chrony:/sbin/nologinspa

  • grep不區分大小寫顯示出來 -ni.net

    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

  • grep取反,除了nologin的顯示出來 -v3d

    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

  • 遍歷全部的子目錄 -r日誌

    [root@localhost grep]# grep -r 'root' /etc/ (etc目錄下全部包含root的文件列出來)
    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)code

  • -A2把包含root的行,以及這行下面的兩行都打印出來。

    [root@localhost grep]# grep -nA2 'root' passwd 
    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

  • -B2把包含root的行,以及這行下面的兩行都打印出來。

    [root@localhost grep]# grep -nB2 'root' passwd 
    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

  • -C2把包含root的行以及這上下兩行都打印出來。

    [root@localhost grep]# grep -nC2 'root' passwd 
    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

grep正則表彷佛具體用法示例

查看一個文件裏0-9全部的數字,[]括號表示裏面的任意一個字符

[root@localhost grep]# grep '[0-9]' passwd 
2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

反選-v,把不包含數字的行列出來。

[root@localhost grep]# grep -nv '[0-9]' /etc/inittab 
2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

取反,過濾掉全部以#開頭的行

[root@localhost grep]# grep -nv '^#' inittab
把不是以#開頭的行,顯示出來

  • 過濾非0-9開頭的數字的行顯示出來

    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

    過濾出任意一個字符和重複字符,示例以下:

    [root@localhost grep]# grep 'r.o' passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)
    .表示任意一個字符,上例中,r.o表示r與o之間有一個任意字符的行過濾出來。

指定要過濾出的字符出現次數,示例以下:

[root@localhost grep]# grep 'o{2}' passwd 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)
這裏用到了符號{}表示內部爲數字,表示前面的字符要重複的詞數。
{}左右都須要加上轉義字符\,另外使用{}還能夠表示一個範圍,具體格式爲{n1,n2}
{}花括號表示前一個字符的範圍,若是o{2},表示2個連續的oo顯示出來。

過濾出一個或多個指定的字符,示例以下:

[root@localhost grep]# egrep 'o+b' passwd 
nobody:x:99:99:Nobody:/:/sbin/nologin

過濾出零個或iyge指定的字符,示例以下:

[root@localhost grep]# egrep 'o?1o' passwd 
bin:x:1o:1:bin:/bin:/sbin/nologin
o1o

過濾出字符串1或者字符串2,示例以下: |或者

[root@localhost grep]# egrep 'root|nologin' passwd 
2018.4.22 五週第五次課 (正則grep-過濾指定關鍵詞)

總結:

. 表示任意一個字符
* 表示零個或者多個字符
{} 表示一個範圍
+ 表示一個或多個任意字符
? 表示零個或多個任意字符
| 表示或者
相關文章
相關標籤/搜索