正則表達式及grep使用

正則表達式分為:“基本正則表達式 BRE”跟“擴展正則表達式 ERE”

基本正則表達式:

    (1)字符匹配    

          "."任意單個字符

           "[]"匹配指定范圍內的單個字符

          "[^]"匹配字符以外的單個字符

    (2)次數匹配

          "*"匹配前面字符的任意次 (.*:組合就相當于glob中的"*"匹配任意字符任意次)

          "\?"匹配前面的字符0次或1次;"\+"匹配前面的字符至少1次

          "\{m\}"匹配前面的字符"m"次;"\{m,n\}"匹配前面的字符至少"m"次至多"n"次

    (3)位置錨定

          "^"行首;"$"行尾;("^$":真空行,什么都沒有。 "^[[:space:]]*$"有空白字符的空行。)

          "\<"或"\b"詞首;"\>"或"\b"詞尾;

    (4)分組

         "\(\)"將一個或多個字符捆綁在一起,當一個整體處理;

         "\1"后項引用,引用從左向右數第一個分組所匹配到的字符;以此類推"\2"就是第2個分組所匹配到的字符,"\3"就是第三個….

    blob.png(圖很丑看明白就好,哈哈..)

        注意:后項引用是直接使用前一個分組已經匹配出來的字符結果,而次數匹配的是相當于在做1次或多次匹配

擴展正則表達式:

    (1)字符匹配    

          "."任意單個字符

           "[]"匹配指定范圍內的單個字符

          "[^]"匹配字符以外的單個字符

    (2)次數匹配

          "*"匹配前面字符的任意次 (.*:組合就相當于glob中的"*"匹配任意字符任意次)

          "?"匹配前面的字符0次或1次;"+"匹配前面的字符至少1次

          "{m}"匹配前面的字符"m"次;"{m,n}"匹配前面的字符至少"m"次至多"n"次

    (3)位置錨定

          "^"行首;"$"行尾;("^$":真空行,什么都沒有。 "^[[:space:]]*$"有空白字符的空行。)

          "\<"或"\b"詞首;"\>"或"\b"詞尾;

    (4)分組

         "()"將一個或多個字符捆綁在一起,當一個整體處理;

         "\1"后項引用,引用從左向右數第一個分組所匹配到的字符;以此類推"\2"就是第2個分組所匹配到的字符,"\3"就是第三個….

    (5)或者   "|" a|b:a或者b

           A|asd:A或者asd

            (cai)|(CA)I:cai或者CA


        大部分跟正則表達式相同,有些只是去掉"\"反斜線逃。

        正則表達式默認工作在貪婪模式下。

grep:是一個可以使用正則表達式搜索匹配的文本過濾工具,使用正則表達式可以做到匹配出很多“glob”匹配不出的內容。

       
            grep [OPTIONS] PATTERN [FILE...]
            grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
                        選項:
                                                        --color=auto: 對匹配到的文本著色顯示;
                                                        -v: 顯示不能夠被pattern匹配到的行;
                                                        -i: 忽略字符大小寫;
                                                        -o: 僅顯示匹配到的字符串;
                                                        -q: 靜默模式,不輸出任何信息;
                                                        -A #:after, 后#行
                                                        -B #: before, 前#行
                                                        -C #:context, 前后各#行
                                                        -E:使用ERE;

grep使用演示:

1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)

# grep -i "^s" /proc/meminfo 
# grep "^[Ss]" /proc/meminfo
# grep "^S" /proc/meminfo && grep "^s" /proc/meminfo (感謝“N21-藍”妹子的細心實驗檢查,這個答案是有問題的,各位可以看下有什么問題檢驗一下自己。)

2、顯示/etc/passwd文件中不以/bin/bash結尾的行;

# grep -v "/bin/bash$" /etc/passwd

3、顯示/etc/passwd文件中ID號最大的用戶的用戶名;

# sort -t: -k3 -n /etc/passwd | tail -1 | grep -o "^[[:alnum:]]\+\b"
# sort -t: -k3 -n /etc/passwd | tail -1 | grep -o -E "^[[:alnum:]]+\b"

4、如果用戶root存在,顯示其默認的shell程序;

# id root &> /dev/null && grep "^root" /etc/passwd | cut -d: -f7

5、找出/etc/passwd中的兩位或三位數;

# grep "\b[0-9]\{2,3\}\b" /etc/passwd
# grep -E "\b[0-9]{2,3}\b" /etc/passwd

6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行;

# grep "^[[:space:]]\+[^[:space:]]\+" /etc/rc.d/rc.sysinit

7、找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行;

# netstat -tan | grep --color "LISTEN[[:space:]]*"

8、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;

這題我使用bash腳本
#!/bin/bash
id bash &> /dev/mull || useradd bash
id testbash &> /dev/null || useradd testbash
id basher &> /dev/null || useradd basher
id nologin &> /dev/null || useradd -s /sbin/nologin nologin
grep --color "^\(\b[[:alnum:]]\+\b\).*\1$" /etc/passwd
#grep --color -E "^(\b[[:alnum:]]+\b).*\1$" /etc/passwd

1、顯示當前系統root、centos或user1用戶的默認shell和UID;

# grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d: -f1,3,7

2、找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行;

# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions

3、使用echo輸出一絕對路徑,使用egrep取出其基名;

# echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1

4、找出ifconfig命令結果中1-255之間的數值;

# ifconfig | grep -E --color "\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-4]?"

5、找出ifconfig命令結果中的IP地址;

# ifconfig | grep -E --color "((\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-5]?)\b\.){3}(\b[0-9]{1,2}\b|\b1[0-9]{1,2}\b|2[0-4][0-9]?|\b25[0-5]?\b)"

原創文章,作者:N21_志建,如若轉載,請注明出處:http://www.www58058.com/22226

(0)
N21_志建N21_志建
上一篇 2016-07-10
下一篇 2016-07-10

相關推薦

  • 22期第8周課堂練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。     2、IP地址的分類有哪些?子網掩碼的表示形式及其作用   A類:第一段為網絡號,后三段為主機號            網絡號0 000 0000 – 0 111 1111…

    Linux干貨 2016-10-09
  • 網絡配置——命令家族

    Linux網絡屬性配置命令: ifcfg家族:ifconfig,route,netstat ifconfig命令:接口及地址查看和管理          ·ifconfig [INTERFACE]       &nbsp…

    Linux干貨 2016-09-07
  • 08-vim文本編輯器

    簡介: vi: Visual Interface,文本編輯器 文本:ASCII, Unicode 文本編輯種類: 行編輯器: sed 全屏編輯器:nano, vi vim – Vi Improved 其他編輯器: gedit 一個簡單的圖形編輯器 gvim 一個Vim編輯器的圖形版本 打開文件: # vim [OPTION]… FIL…

    2017-03-16
  • python 10第二周博客作業

    1.取磁盤利用率:cut -d命令 df|tr –s? ‘ ’?? ‘%’ |cut –d “%” –f5正則表達式:df -h |grep “^/dev/sd” |grep -o “[[:digit:]]\+%”|grep -o “[[:digit:]]\+”2. paste 合并兩個…

    Linux干貨 2018-03-17
  • centos下nginx啟動腳本和chkconfig管理

    在安裝完nginx后,要用/usr/local/nginx/sbin/nginx來啟動nginx,顯然十分不方便。如果能像apache一樣,直接通過腳本進行管理就方便多了。 vim /etc/init.d/nginx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27…

    Linux干貨 2017-09-27
  • Linux基礎知識(三)

    1、列出當前系統上所有已經登錄的用戶的用戶名(多次登錄的用戶,只顯示一次即可) [root@bogon ~]# w |grep -E ".*(pts|tty).*"|awk '{print $1}'|uniq 2、列出最后登錄到當前系統的用戶的相關信息 [root@bogon ~]# last -aF 3、取出當前系統…

    Linux干貨 2016-10-09

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-07-12 14:44

    寫的很好,排版還可以在漂亮一點,加油

欧美性久久久久