grep的使用以及正則表達式

正則表達式以及grep的使用

grep是一種文本過濾工具(模式:pattern)基本使用用法如下:

grep  [option] PATTERN  FILE          
 grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
      --colour=auto:對匹配到的文本著色
      -i:ignorecase 忽略字符大小寫
      -o:僅顯示匹配到的字符串本身
      -v:反向顯示
      -E:支持擴展的正則表達式
      -q:靜默模式 不輸出任何信息
      -A#:after 后#行
      -B#:before 前#行
      -C#:context 前后#行

基本正則表達式的元字符:


               字符匹配:
                     . :任意單個字符
                    []:匹配指定范圍內的任意單個字符
                    [^]:匹配指定范圍外的任意單個字符
            匹配次數:用在要指定其出現的次數的字符的后面,用于限制其前面字符出現的次數
                    *:匹配其前面的字符任意此;0,1,多次
                   .*:匹配任意長度的任意字符           
                   \?: 匹配前面的字符0次或1次,即其前面的字符可有可無
                   \+: 匹配前面的字符1次或多次,即前面的字符至少出現1次
                  \{m\}:匹配前面的字符m次
                  \{m,n\}匹配前面的字符至少m次,最多n次
                        \{0,n}:最多n次
                        \{m,\}:至少m次
            位置錨定
                    ^:行首錨定:用于模式的最左側
                   $:行尾錨定;用于模式最右側
                   ^PATTERN$:用于PATTERN來匹配整行
                   ^$:空白行
                   ^[[:space:]]*$:空白行貨包含空白字符的行
                  單詞:非特殊字符組成的連續字符串都稱為單詞
                   \< 或\b:詞首錨定 用于單詞模式的左側 
                   \>或\b:詞尾錨定,用于單詞模式的右側
                   \<PATTERN\>:匹配完整單詞
            分組及引用
                   \(\):將一個或多個字符捆綁在一起,當作一個整體處理
                             例如:\(xy\)*ab
          分組括號中的模式匹配到的內容會被正則表達式引擎自動記錄于內部的變量中,這些變量為
               \1:模式從左側起,第一個左括號以及與之匹配的右括號之前的模式所匹配到的字符
               \2:模式從左側起,第二個左括號以及與之匹配的右括號之前的模式所匹配到的字符
               \3:
       后項引用:應用前面的分組括號中的模式所匹配到的字符

擴展正則表達式

       字符匹配:
              .:匹配任意單個字符
              []:指定范圍內的任意單個字符 
           [^]:匹配指定范圍外的任意單個字符
        次數匹配
                *:任意次,0,1或多次
               ?:0次或1次,其前字符可有可無
                +:其前字符至少1次
              {m}:其前字符至少m次
              {m,n}:其前的字符m次
        位置錨定
               ^:行首錨定
               $:詞尾錨定
               \< 或\b:詞首錨定 用于單詞模式的左側 
               \>或\b:詞尾錨定,用于單詞模式的右側
               \<PATTERN\>:匹配完整單詞  
        分組及引用:
             ():分組,括號內的模式匹配到的字符會被記錄于正則表達式引擎的內部變量中
              后向引用:\1, \2
        或: a|b: a或者b

練習:

1 取出ifconfig命令中的ip地址
[root@Linuxprobe ~]# ifconfig | egrep  -o "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-4]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-5]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-9][0-5]|25[0-5])"
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255
[root@Linuxprobe ~]# ifconfig | egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" 稍微簡潔寫的寫法
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255
[root@Linuxprobe ~]# ifconfig | egrep -o "(([0-9]{1,3})\.){3}[0-9]{1,3}"再次進行精簡
10.127.69.19
255.255.255.0
10.127.69.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255

2 找出/etc/passwd中用戶名與默認shell同名的的行  
 [root@Linuxprobe ~]# cat /etc/passwd | grep -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
 bash:x:1002:1002::/home/bash:/bin/bash
 nologin:x:1003:1003::/home/nologin:/bin/nologin

3 取出一個文件的基名和路徑名
[root@Linuxprobe ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o "[^/]+$" 取一個文件的基本
ifcfg-ens33
[root@Linuxprobe ~]# echo /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep  "^/.*/" -o 取出路徑名
/etc/sysconfig/network-scripts/

4 取出/etc/rc.d/functions文件某個單詞后面跟一個小括號的行
 [root@Linuxprobe ~]# egrep "[[:alnum:]]+\>\(\)+" /etc/rc.d/init.d/functions -o
checkpid()
checkpids()
kill()
.....

5 用兩種方法顯示/proc/meminfoz中大寫或小寫S開頭的行
[root@Linuxprobe backups]# grep "^[sS].*" /proc/meminfo 
SwapCached:87404 kB
SwapTotal:   2097148 kB
SwapFree:1929492 kB
Shmem:  8332 kB
Slab: 189808 kB
SReclaimable: 118840 kB
SUnreclaim:70968 kB
[root@Linuxprobe backups]# grep -E "^(s|S).*" /proc/meminfo 
SwapCached:87400 kB
SwapTotal:   2097148 kB
SwapFree:1929496 kB
Shmem:  8336 kB
Slab: 189808 kB
SReclaimable: 118840 kB
SUnreclaim:70968 kB
6 取出/etc/paswwd文件中默認shell為非/sbin/nogloin
[root@Linuxprobe backups]# grep -v "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
harrycai:x:1000:1000:harry.cai:/home/harrycai:/bin/bash
.............................................
7 取出/etc/paswwd文件中默認shell為/bin/bash的用戶
[root@Linuxprobe backups]# grep  "bash\>$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
harrycai:x:1000:1000:harry.cai:/home/harrycai:/bin/bash
student:x:1001:1001::/home/student:/bin/bash
bash:x:1002:1002::/home/bash:/bin/bash
user1:x:1004:1004::/home/user1:/bin/bash
.............................................

8 找出/etc/passwd 文件中的一位數或兩位數
[root@Linuxprobe backups]# grep -E  "\<[0-9]{1,2}\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
.............................................

9 顯示/boot/grub/grub.conf中至少一個空白字符開頭的行
[root@Linuxprobe backups]# grep -E "^[[:space:]]+" /boot/grub2/grub.cfg 
10 顯示/etc/rc.d/network文件中以#開頭局,后面至少一個空白字符,而后又至少一個非空白字符行
[root@Linuxprobe backups]# grep -E "^#[[:space:]]+[^[:space:]]+" /etc/rc.d/init.d/network 
# network   Bring up/down networking
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to \
.......................

11 打出netstat -tan命令執行結果以“LISTEN”,后面跟空白字符的行
[root@Linuxprobe backups]# netstat -tan | grep -E "LISTEN\>[[:space:]]+"
tcp0  0 0.0.0.0:111 0.0.0.0:*   LISTEN 
tcp0  0 192.168.122.1:530.0.0.0:*   LISTEN   
............................................

12 匹配出所有的郵件地址
[root@Linuxprobe ~]# cat mailtest | grep -E "\<[[:alnum:]]*@[[:alnum:]]*[[:punct:]]*[[:alnum:]]*\.[a-z]+\>" 
noc@google.com
noc@telstra-pbs.cn
noc@pacnet.com.cn
414804000@qq.com
jzssysjzzyxgs@3158.com 
sales@wiremesh-machine.cn 
1305480186@qq.com 
.............

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

(0)
N27_CaiShuangN27_CaiShuang
上一篇 2017-08-21 17:33
下一篇 2017-08-21 18:59

相關推薦

  • RAID[Redundant Array of Independent Disks | 獨立硬盤冗余陣列 ]

    前言 一個技術要知其然還要知其所以然 RAID 獨立硬盤冗余陣列(RAID, Redundant Array of Independent Disks),舊稱廉價磁盤冗余陣列(Redundant Array of Inexpensive Disks),簡稱磁盤陣列 RAID的基本思想 其基本思想就是把多個相對便宜的硬盤組合起來,成為一個硬盤陣列組,使性能達到…

    Linux干貨 2016-05-20
  • N25-第一周博客

      第一周博客作業內容 1.描述計算機的組成及其功能 2.按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別 3.描述Linux哲學思想,并按照自己的理解對其進行解釋性描述。 4.說明Linux系統上命令的使用格式:詳細介紹,ifconfg,echo,tty,startx,export pwd,history,shutdown,powe…

    Linux干貨 2016-12-03
  • 馬哥教育網絡班21期+第13周課程練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程) 1)共享名為shared,工作組為magedu; 2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名; 3)添加samba用戶gentoo,centos和u…

    Linux干貨 2016-10-17
  • 馬哥教育網絡班20期+第5周課程練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; grep "^[[:space:]]\+.*" /boot/grub/grub.conf   2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; grep&nb…

    Linux干貨 2016-07-12
  • zabbix監控Hadoop的實現

            Hadoop日常運行過程中一些參數需要進行實時監控,如:Map、Reduce任務數量,HDFS磁盤使用情況,namenode、datanode在線數量及健康情況,以便更好的掌握整個Hadoop集群架構的運行情況。         下面結合最近工作中的一些…

    Linux干貨 2015-03-08
  • N22-℡浮生.若夢 ╮第六周作業

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.sysinit /tmp/rc.sysinit vim/tmp/rc.sysinit :%s@^[[:space:]]\+@#&@g 2、復制/boot/grub…

    Linux干貨 2016-10-29
欧美性久久久久