深入了解正則表達式與grep應用

剛開始學習正則表達式時候,感覺和看無字天書沒什么分別,迷茫了一段時間后,仔細去理解,慢慢你會發現也沒什么的。認真去鉆研了,多練習,是可以理解他們的含義的。也許正如老師所言,學習linux ,入門的確很陡峭,對于我這個基礎薄弱,智商低于80的人來說的確很吃力。
關于正則概念的就不去描述了,說起來真的不好表達,下面通過一些實例來進行深入理解吧。

  • 1.顯示當前系統上面的root,fedora,或usr1的默認shell
    [root@dxlcentOS ~]# egrep “^(root|fedora|user1)” /etc/passwd | cut -d: -f7
    /bin/bash
    /bin/tcsh
    /bin/bash
    這實例用到了正則的或”|”,^(root|fedora|user1)表示這三個其中一個出現行首的對進行匹配,后面的cut就不用說了,匹配后進行切割出來。
  • 2.找出/etc/rc.d/init.d/functions文件中的某單詞后面跟一組小括號的行,如hello()
    [root@dxlcentOS ~]# egrep “<[[:alnum:]]+>()” /etc/rc.d/init.d/functions
    checkpid() {
    daemon() {
    killproc() {
    [root@dxlcentOS ~]# egrep -o “[[:alnum:]]+()” /etc/rc.d/init.d/functions 不要錨定詞首和詞尾也行
    checkpid()
    checkpids()
    kill()
    ……..
  • 3.使用一個echo命令輸出一個絕對路徑名,使用grep取出其基名。再嘗試取路徑名
    [root@dxlcentOS ~]# echo “/etc/rc.d/init.d/functions” | cut -d/ -f5
    functions
    [root@dxlcentOS ~]# echo “/etc/rc.d/init.d/functions” | cut -d/ -f1-4 取路徑名
    /etc/rc.d/init.d
    [root@dxlcentOS ~]# echo “/etc/rc.d/init.d/functions” | egrep -o “[/].*/”
    /etc/rc.d/init.d/?取路徑名,以“/”開始中間跟任意字符,以“/”結束
    [root@dxlcentOS ~]# echo “/etc/rc.d/init.d/functions” | egrep -o “[^/]+$”
    functions?取基名:以非“/”開始,“$”錨定行尾,匹配行尾出現1次以上的字符
  • 4.找出ifconfig命令結果中的0-255之間的數字
    [root@dxlcentOS ~]# ifconfig | egrep -o “<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>”
    192
    168
    0
    196
    255
    ………….
    [0-9] 匹配一位數。 [1-9][0-9] 匹配兩位數。1[0-9][0-9] 匹配100-199之間的數。2[0-5][0-5] 匹配200-255之間的數值?!皘”表示或。([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])表示分組。<…>表示錨定詞首和詞尾??傮w的理解是首先進行0-255的數值定好,錨定他們一位數,兩位數,三位數分別作為一個整體然后進行匹配。有了這個基礎匹配下面的ip地址就容易理解了。
  • 5.用grep匹配出ifconfig命令結果的合理的IP地址
    [root@dxlcentOS ~]# ifconfig | egrep “<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>.(<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>.){2}<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>”
    inet 192.168.0.196 netmask 255.255.255.0 broadcast 192.168.0.255
    inet 192.168.0.113 netmask 255.255.255.0 broadcast 192.168.0.255
    inet 127.0.0.1 netmask 255.0.0.0
    第一步:先把0-255的數值匹配出來。第二步:再把IP地址之間的“.”匹配出來,(<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])>.){2} 中間匹配兩次。第三步匹配最后一個IP地址數值。
    用grep過濾IP地址的確是比較麻煩。為了理解正則很有幫助。用awk sed,cut等工具很快可以取IP地址。
  • 6.寫一個模式,能匹配出所有電子郵件地址
    首先了解下郵箱的格式:
    1)郵箱里面必須包含@符。
    2)用戶名,@前面的字符,可以自己選擇。由字母a-z(不區分大小寫)、數字0-9;只能以數字或字母開頭和結尾,例如:tom_cat;用戶名長度為4~18個字符 。
    3)郵箱必須以頂級域名 .com ,.cn , .edu .org .net 等結尾。
    4) 字符”@”和 “. “之間只能是小寫字母和數字組成,不能有特殊字符,長度2-12個。
    [root@dxlcentOS ~]# grep -E “[[:alnum:]]{4,18}@[[:alnum:]]{2,14}.(com|cn|net|org)” /tmp/email

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88181

(0)
N27_dxldengN27_dxldeng
上一篇 2017-11-01
下一篇 2017-11-02

相關推薦

  • 第3周作業

    一、列出當前系統上的所有已經登錄的用戶的用戶名 [root@bogon tmp]# who | cut -d ” ” -f1 | sort -urootwing[root@bogon tmp]# who | cut -d ” ” -f1 | uniqrootwing 二、取出最后登錄到當前系統的用戶相關信息 […

    Linux干貨 2017-07-25
  • 馬哥教育網絡班N22期+第五周課程練習

    1、顯示當前系統上root、fedora或user1用戶的默認shell; ~]# grep -E "^(root|user1|fedora)" /etc/passwd | awk -F: '{ print $1 $7 }' root/bin/bash user1/bin/bash fedora/bin/bash 2、…

    Linux干貨 2016-10-17
  • awk

    文本處理工具 文本處理三工具:grep,sed,awk grep,egrep,fgrep:文本過濾工具 sed:行編輯器 awk:報告生成器,格式化文本輸出; awk gawk – pattern scanning and processing language lrwxrwxrwx. 1 root root 4 May 17 19:23 /bi…

    Linux干貨 2017-05-21
  • 淺談bash shell 變量

    一、簡述 變量是指內存空間的命名,指向內存中一個或一組地址。bash shell中的變量屬于弱類型變量,使用變量無需聲明、不需要指定類型,默認為字符型變量。 二、變量命名、賦值、引用 (1)命名規則:     1.只能使用字母,數字,下劃線;并且不能使用數字開頭。     2.不…

    Linux干貨 2016-08-15
  • MySQL基礎入門詳解

    MySQL MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下公司。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。 想要使用MySQL來存儲并操作數…

    2017-09-16
  • Elasticsearch 5.0 集群

    IT運維 www.chinasa.net 下載地址:https://www.elastic.co/downloads/elasticsearch 1、JDK 安裝略過 node1 部署 2、Elasticsearch安裝 #tar zxvf elasticsearch-5.0.0.tar.gz -C /opt/ #cd /opt #mv elast…

    系統運維 2016-12-27
欧美性久久久久