深入了解正則表達式與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 13:22
下一篇 2017-11-02 15:46

相關推薦

  • Linux發行版及哲學思想

    Linux各發行版以及哲學思想 什么是Linux 為什么會有不同的Linux發行版 現有主流發行版,及其他們之間相互關系 Linux所遵循的哲學思想 什么是Linux Linux是一種自由和開放源代碼的Unix-like操作系統,由當時就讀于芬蘭赫爾辛基大學的Linus Torvalds于1991年10月5日首次發布于互聯網。Linux遵循第二版GNU通用公…

    Linux干貨 2016-10-29
  • shell編程、yum的使用

    shell編程、yum的使用 一、shell編程 1、while的特殊使用 while 循環的特殊用法(遍歷文件的每一行): while read line; do      循環體 done < /PATH/FROM/SOMEFILE   依次讀取/PATH/FROM/SOMEFILE 文件…

    Linux干貨 2016-08-21
  • mysql/mariadb基于ssl的主從復制

     當mysql/mariadb跨越互聯網進行復制時別人可以竊取到mysql/mariadb的復制信息, 這些信息是明文的, 因此存在不安全性, 這里通過ssl對復制的信息進行加密      1. 創建證書中心 在主服務器上創建證書中心 cd /etc/pki/CA 生成私鑰 (umask&…

    Linux干貨 2016-12-05
  • 筆記–8.2–用戶管理,權限管理

    ·硬鏈接,軟鏈接區別 大小 鏈接數 設備,分區 類型 硬連接 一樣大,顯示的是本身的大小 會增加 不能跨分區 是一個文件,相同inode號,忘了位置可通過inode號找到源文件 軟鏈接 不一樣大,鏈接文件大小是路徑的大小 不會增加 可以跨分區,跨設備 兩個文件,不同inode號,像發小廣告,忘了源連接,文件就找不到了 軟鏈接格式:ln -s +絕對路徑或相對…

    Linux干貨 2016-08-05
  • Linux基本命令總結

    一.目錄相關的命令 mkdir rmdir tree cd ls pwd   二.文件相關命令 less cat more tac rev stat head tail cut grep cp mv rm touch rename   三.分析文本的工具 wc sort uniq cut    

    2017-09-10
欧美性久久久久