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 以下符合下列條件之檔案。
- 包含 boot 或 root 字串的檔案。
- 包含 b 開頭 t 結尾且中間 0 個或 1 個 o 之字串的檔案。
- b 開頭 t 結尾且中間 1 個 o 以上之字串的檔案。
練習題
- grep 支援的是基礎型的正規表示法,如何使 grep 支援延伸正規表示法?其命令別名為何?
Sol.
grep -E, egrep
- 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有 g 後面接 1 個以上 o ,然後再接一個 g 之字串的行,並列出行號?
Sol.
egrep -n 'go+g' re.txt
- 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有 g 開頭 d 結尾且中間 0 至 1 個 o 之字串的行,並列出行號?
Sol.
egrep -n 'go?g' re.txt
- 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有 gd、 good 或 dog 這三個字串的行,並列出行號?
Sol.
egrep -n 'gd|good|dog' re.txt
- 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有 glad 或 good 之字串的行,並列出行號?
Sol.
egrep -n 'g(la|oo)d' re.txt
- 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有開頭是 A 結尾是 C ,中間有一個以上的 "xyz" 之字串的行,並列出行號?
Sol.
egrep -n 'A(xyz)+C' re.txt
- 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,含有開頭是 A 結尾是 C ,中間 0 至 一個 "xyz" 之字串的行,並列出行號?
Sol.
egrep -n 'A(xyz)?C' re.txt
- 如何以 egrep 配合延伸正規表示法,搜尋檔案 re.txt 中,不含空白行與行首為
# 的行列,並列出行號?
Sol.
egrep -n '^ | ^#' re.txt
- 如何以 egrep 配合延伸正規表示法,搜尋目錄 /etc 中,含有 boot 或 root 之字串的檔案,並列出行號?
Sol.
egrep -n '(b|r)oot' /etc/*
- 如何以 egrep 配合延伸正規表示法,搜尋目錄 /etc 中,含有開頭是 b 結尾是 t ,中間 0 至 一個 o 之字串的檔案,並列出行號?
Sol.
egrep -n 'bo?t' /etc/*
- 如何以 egrep 配合延伸正規表示法,搜尋目錄 /etc 中,含有開頭是 b 結尾是 t ,中間一個以上 o 之字串的檔案,並列出行號?
Sol.
egrep -n 'bo+t' /etc/*
Next: 正規表示法範例
Up: 正規表示法
Previous: 基礎正規表示法
Contents
2017-06-14