grep命令及正則表達式

grep命令和正則表達式


grep基本概念

grep:global search regular expression and print out the line.

作用:文本過濾器,用于文本搜索,用指定“模式”逐行匹配。

模式:由正則表達式字符及文本字符所編寫的過濾條件

正則表達式:由一類特殊字符和文本字符所編寫的模式,其有些字符不表示字符字面意義,而表示控制或通配的功能

比較記憶:

無標題22.png

基本正則表達式:BRE
擴展正則表達式:ERE
    grep -E = egrep

grep語法

grep [OPTIONS] PATTERN [FILE…]

OPTIONS:
            --color=auto:對匹配到的文本著色后高亮顯示;
            -i:ignorecase,忽略字符的大小寫;
            -o:僅顯示匹配到的字符串本身;
            -v, --invert-match:顯示不能被模式匹配到的行;
            -E:支持使用擴展的正則表達式元字符;
            -q, --quiet, --silent:靜默模式,即不輸出任何信息;

            -A #:after, 后#行
            -B #:before,前#行
            -C #:context,前后各#行

基本正則表達式原字符

字符匹配:

    . :匹配任意單個字符;
    []:匹配指定范圍內的任意單個字符;
    [^]:匹配指定范圍外的任意單個字符;
    [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

匹配次數:

用在要指定其出現的次數的字符的后面,用于限制其前面字符出現的次數;默認工作于貪婪模式;

*:匹配其前面的字符任意次;0,1,多次;
        例如:grep "x\+y"
                abxy
                aby
                xxxxxy
                yab
.*:匹配任意長度的任意字符
\?:匹配其前面的字符0次或1次;即其前面的字符是可有可無的;
\+:匹配其前面的字符1次或多次;即其面的字符要出現至少1次;
\{m\}:匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次
\{m,\}:至少m次

位置錨定:

^:行首錨定;用于模式的最左側;
$:行尾錨定;用于模式的最右側;
^PATTERN$:用于PATTERN來匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;



\< 或 \b:詞首錨定,用于單詞模式的左側;
\> 或 \b:詞尾錨定,用于單詞模式的右側;
\<PATTERN\>:匹配完整單詞;
單詞:非特殊字符組成的連續字符(字符串)都稱為單詞;

分組及引用

\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理;
            \(xy\)*ab

Note:分組括號中的模式匹配 到的內容會被正則表達式引擎自動記錄于內部的變量中,這些變量為:
\1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
\2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
\3
      ...

            He loves his lover.
            He likes his lover.
            She likes her liker.
            She loves her liker.

            ~]# grep  "\(l..e\).*\1"  lovers.txt

后向引用:引用前面的分組括號中的模式所匹配到的字符;

擴展正則表達式的元字符

字符匹配:

.:任意單個字符
[]:指定范圍內的任意單個字符
[^]:指定范圍外的任意單個字符

次數匹配:

*:任意次,0,1或多次;
?:0次或1次,其前的字符是可有可無的;
+:其前字符至少1次;
{m}:其前的字符m次;
{m,n}:至少m次,至多n次; 
        {0,n}
        {m,}

位置錨定

^:行首錨定;
$:行尾錨定;
\<, \b:詞首錨定;
\>, \b:詞尾錨定;

分組及引用:

():分組;括號內的模式匹配到的字符會被記錄于正則表達式引擎的內部變量中;
后向引用:\1, \2, ...
    或:
a|b:a或者b;
        C|cat:C或cat
        (c|C)at:cat或Cat

練習:(grep)

1、顯示/etc/passwd文件中不以/bin/bash結尾的行;
    ~]# grep -v "/bin/bash$" /etc/passwd

2、找出/etc/passwd文件中的兩位數或三位數;
    ~]# grep  "\<[0-9]\{2,3\}\>"  /etc/passwd

3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一個空白字符開頭,且后面非空白字符的行;
    ~]# grep  "^[[:space:]]\+[^[:space:]]"  /etc/grub2.cfg

4、找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行;
    ~]# netstat -tan | grep  "LISTEN[[:space:]]*$"

練習:(egrep)

1、找出/proc/meminfo文件中,所有以大寫或小寫S開頭的行;至少有三種實現方式;
    ~]# grep -i "^s" /proc/meminfo
    ~]# grep "^[sS]" /proc/meminfo
    ~]# grep -E "^(s|S)" /proc/meminfo

2、顯示肖前系統上root、centos或user1用戶的相關信息;
    ~]# grep -E "^(root|centos|user1)\>" /etc/passwd

3、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一個小括號的行;
    ~]# grep  -E  -o  "[_[:alnum:]]+\(\)"  /etc/rc.d/init.d/functions

4、使用echo命令輸出一絕對路徑,使用egrep取出基名;
    ~]# echo /etc/sysconfig/ | grep  -E  -o  "[^/]+/?$"

    進一步:取出其路徑名;類似于對其執行dirname命令的結果;
        ~]# echo /etc/sysconfig/ | egrep -o "^/.*[^/]" | egrep -o "^/.*/" | egrep -o  "^.*[^/]"
        ~]#echo /etc/sysconfig/ | egrep -o "^/.*(/[[:alnum:]])" | egrep -o "^/.*/" | egrep -o  "^.*[^/]"
5、找出ifconfig命令結果中的1-255之間的數值;
    ~]# ifconfig | grep  -E  -o  "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

6、課外作業:找出ifconfig命令結果中的IP地址;

7、添加用戶bash, testbash, basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;
    ~]# grep  -E  "^([^:]+\>).*\1$"  /etc/passwd

課外練習

http://www.tuicool.com/articles/uyuIbaV

原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/57700

(0)
N24_yeziN24_yezi
上一篇 2016-11-05 19:11
下一篇 2016-11-05 20:08

相關推薦

  • 磁盤及文件系統管理

    Linux磁盤及文件系統: 磁盤:用于持久存放數據 常見的磁盤有:機械硬盤、固態硬盤 I/O Ports: I/O設備地址 常見的硬盤接口類型:      IDE(ata):并口,133MB/s     SCSI:并口,UltraSCSI320,320MB/s,UltraSCSI…

    Linux干貨 2016-08-26
  • lvs集群搭建

    Linux Cluster: Cluster:計算機集合,為解決某個特定問題組合起來形成的單個系統; Linux Cluster類型:LB:Load Balancing,負載均衡;HA:High Availiablity,高可用;A=MTBF/(MTBF+MTTR)(0,1):90%, 95%, 99%, 99.5%,  99.9%, 99.99%…

    2017-05-09
  • sed的模式匹配用法探討

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1405753 [root@sunsky Desktop]# cat sunsky a b c d e f [root@sunsk…

    Linux干貨 2016-08-15
  • 用戶和組的管理

    在Linux系統上,用戶管理是基于用戶名和密碼的方式進行資源的分配的,Linux上的用戶分為以下的類別: 管理員 : root  ,UID為0 (這個用戶有極大的權限,可以直接無視很多的限制,包括讀寫執行的權限。所以這個用戶的使用要小心,因為他的權限太大。) 普通用戶的UID:1-65535 普通用戶又可分為: 系統用戶(已經存…

    2017-04-08
  • sed基本用法

    Stream EDitor, 行編輯器  sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space), 接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。然后讀入下行,執行下一個循環。如果沒有使諸如‘D’的特殊命令, 那會在兩個循環之間清空模式空間,但不會…

    Linux干貨 2017-08-20
  • 文件的查找與壓縮歸檔

    文件的查找與壓縮歸檔 locate find 壓縮與歸檔 locate 主要用途 查詢系統上預建的文件索引數據庫 locate – find files by namelocate [OPTION]… PATTERN… locate查詢文件時,會去搜索/var/lib/mlocat…

    Linux干貨 2016-08-21

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-11-10 18:36

    贊,grep總結的還是比較細的,幾個例子也比較好~繼續加油~

欧美性久久久久