next up previous contents
Next: 正規表示法範例 Up: 正規表示法 Previous: 基礎正規表示法   Contents

延伸正規表示法

  • grep 支援的是基礎型的正規表示法,延伸正規表示法 egrep 是 grep -E 的命令別名。
  • 延伸型正規表示法之特殊符號
    RE 字符         意義與範例
      +      重複『一個或一個以上』的前一個 RE 字符
             #範例:egrep -n 'go+d' re.txt
             搜尋 (god) (good) (goood)... 等等的字串。
      ?     『零個或一個』的前一個 RE 字符
             #範例:egrep -n 'go?d' re.txt
             搜尋 (gd) (god) 這兩個字串。
      |      用或( or )的方式找出數個字串
             #範例:egrep -n 'gd|good|dog' re.txt
             搜尋 gd 、 good 或 dog 這三個字串。 
     ( )     找出『群組』字串或作為『多個重複群組』的判別
             #範例:egrep -n 'g(la|oo)d' 
             搜尋 (glad) 或 (good) 這兩個字串。
             #範例:egrep -n 'A(xyz)+C' re.txt
             找開頭是 A 結尾是 C ,中間有一個以上的 "xyz" 字串。
    
  • 例題:去除空白行與行首為 # 的行列
    #基礎型的正規表示法需要使用到管線命令來搜尋兩次 
    grep -v '^$' re.txt | grep -v '^#'
    #支援延伸型正規表示法可以簡化為:
    egrep -v '^$|^#' re.txt
    
  • 例題:以延伸型正規表示法顯示行號方式,找出目錄 /etc 以下符合下列條件之檔案。
    1. 包含 boot 或 root 字串的檔案。
    2. 包含 b 開頭 t 結尾且中間 0 個或 1 個 o 之字串的檔案。
    3. b 開頭 t 結尾且中間 1 個 o 以上之字串的檔案。
練習題
  1. grep 支援的是基礎型的正規表示法,如何使 grep 支援延伸正規表示法?其命令別名為何?
    Sol. grep -E, egrep
  2. 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有 g 後面接 1 個以上 o ,然後再接一個 g 之字串的行,並列出行號?
    Sol. egrep -n 'go+g' re.txt
  3. 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有 g 開頭 d 結尾且中間 0 至 1 個 o 之字串的行,並列出行號?
    Sol. egrep -n 'go?g' re.txt
  4. 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有 gd、 good 或 dog 這三個字串的行,並列出行號?
    Sol. egrep -n 'gd|good|dog' re.txt
  5. 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有 glad 或 good 之字串的行,並列出行號?
    Sol. egrep -n 'g(la|oo)d' re.txt
  6. 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有開頭是 A 結尾是 C ,中間有一個以上的 "xyz" 之字串的行,並列出行號?
    Sol. egrep -n 'A(xyz)+C' re.txt
  7. 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有開頭是 A 結尾是 C ,中間 0 至 一個 "xyz" 之字串的行,並列出行號?
    Sol. egrep -n 'A(xyz)?C' re.txt
  8. 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,不含空白行與行首為 # 的行列,並列出行號?
    Sol. egrep -n '^ | ^#' re.txt
  9. 如何以 egrep 配合延伸正規表示法,搜尋目錄 /etc 中,含有 boot 或 root 之字串的檔案,並列出行號?
    Sol. egrep -n '(b|r)oot' /etc/*
  10. 如何以 egrep 配合延伸正規表示法,搜尋目錄 /etc 中,含有開頭是 b 結尾是 t ,中間 0 至 一個 o 之字串的檔案,並列出行號?
    Sol. egrep -n 'bo?t' /etc/*
  11. 如何以 egrep 配合延伸正規表示法,搜尋目錄 /etc 中,含有開頭是 b 結尾是 t ,中間一個以上 o 之字串的檔案,並列出行號?
    Sol. egrep -n 'bo+t' /etc/*


next up previous contents
Next: 正規表示法範例 Up: 正規表示法 Previous: 基礎正規表示法   Contents
2017-06-14