不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 > Linux正則表達式詳解

Linux正則表達式詳解

時間: 志藝942 分享

Linux正則表達式詳解

  你還在為不知道Linux 正則表達式詳解而煩惱么?接下來是小編為大家收集的Linux 正則表達式詳解,希望能幫到大家。

  Linux 正則表達式詳解

  一.linux文本查找命令

  在說linux正規(guī)表達式之前,還介紹下linux中查找文本文件常用的三個命令:

  1.grep : 最早的文本匹配程序,使用POSIX定義的基本正則表達式(BRE)來匹配文本。

  2.egrep : 擴展式grep,其使用擴展式正規(guī)表達式(ERE)來匹配文本。

  3.fgrep : 快速grep,這個版本匹配固定字符串而非正則表達式。并且是唯一可以并行匹配多個字符串的版本。

  如下簡單的介紹grep命令:

  語法格式:

  grep [options ...] pattern-spec [files ...]

  用途:

  匹配一個或多個模式的文本行。

  options:

  -E : 使用擴展正則表達式進行匹配, grep -E 或取代 egrep 命令。

  -F : 使用固定字符串進行匹配, grep -F 或取代傳統(tǒng)的fgrep命令。

  -e : 通常第一個非選項的參數(shù)認為是要匹配的模式,也可以同時提供多個模式,只要將其放入單引號,并用換行字符分隔他們。

  模式以減號開頭時,為防止混淆其為選項,-e選項說明其后的參數(shù)為模式,即使他以減號開頭。

  -f : 從pat-file文件讀取模式作為匹配。

  -i : 模式匹配時忽略大小寫差異。

  -l : 列出匹配模式的文件名稱,而不是打印匹配的行。

  -q : 靜默的,如果匹配成功,不將匹配的行輸出到標準輸出;否則即是不成功。

  -s : 不顯示錯誤信息,通常與-q并用。

  -v : 顯示不匹配模式的行。

  說明:可以同時查找多個文件中的內(nèi)容,當(dāng)指定多個文件時,每個顯示出的文件行前會有文件名加一個冒號標識其來自哪個文件。

  可以使用多個-e 或 -f 選項,建立要查找的模式列表。

  二.正則表達式簡要介紹

  1.正則表達式的組成

  (1).一般字符:沒有特殊意義的字符

  (2).特殊字符(meta字符):元字符,有在正則表達式中有特殊意義

  2.如下講下正則表達式中的常見meta字符

  (1).POSIX BRE與ERE中都有的meta字符:

  \ : 通常用于打開或關(guān)閉后續(xù)字符的特殊含義,如\(...\)與\{...\}

  . : 匹配任何單個字符(除NUL)

  * : 匹配其前的任何數(shù)目或沒有的單個字符,例: . 表示任一字符, 則 .* 匹配任一字符的任意長度

  ^ : 匹配緊接著的正則表達式,BRE中僅在正則表達式的開頭有特殊的含義,ERE中在任何位置都有特殊含義

  $ : 匹配前面的正則表達式,在字符串或者行結(jié)尾處。BRE中僅在正則表達式的結(jié)尾處有特殊的含義,ERE中在任何位置都有特殊含義

  [] : 匹配方括號內(nèi)的任一字符,其中可用連字符(-)指的連續(xù)字符的范圍;^符號苦出現(xiàn)在方括號的第一個位置,則表示匹配不在列表中的任一字符,

  (2).POSIX BRE中才有的字符:

  \{n,m\} : 區(qū)間表達式,匹配在它前面的單個字符重現(xiàn)的次數(shù)區(qū)別。\{n\}指重現(xiàn)n次;\{n,m\}指重現(xiàn)n至m次;

  \( \) : 保留空間,可以將最多9個獨立的子模式存儲在單個模式中。如\(ab\).* class="main">

Linux正則表達式詳解

時間: 志藝942 分享

  \n : 重復(fù)在\(與\)方括號內(nèi)第n個子模式至此點的模式。

  (3).POSIX ERE中才有的字符:

  {n,m} : 與BRE的\{n,m\}功能相同

  + : 匹配前面正則表達式的一個或多個擴展

  ? : 匹配前面正則表達式的零個或一個擴展

  | : 匹配|符號前或后的正則表達式

  ( ) : 匹配方括號括起來的正則表達式群

  (4). 方括號([])表達式

  4.1.字符集 [: :]

  標識字符集,有如下幾種:

[::alnum] : 數(shù)字字符 [:digit:] : 數(shù)字字符 [:punct:] : 標點符號字符
[:alpha:] : 字母字符 [:graph:] : 非空格字符 [:space:] : 空格字符
[:blank:] : 空格與定位字符 [:lower:] : 小寫字母字符 [:upper:] : 大寫字母字符
[:cntrl:] : 控制字符 [:print:] : 可顯示的字符 [:xdigit:] : 16進制數(shù)字

  4.2.排序符號

  指將多個字符視為一個符號,如[.ch.]即將ch視為一個符號

  4.3.等價字符

  認為多個字符相等,如[=e=]在法文的locale里,可匹配于多種與e相似的字符,此處不再列出。

  說明:這三種構(gòu)造除其自身的方括號之外,還必須使用額外的方括號括起來。

  例 : [[:alpha:]!] : 匹配任一英文字母或感嘆號。

  [[.ch.] : 匹配ch排序元素,而不匹配單獨的字母c或h.

  3.簡單正規(guī)表達式匹配案例

  china : 匹配此行中任意位置有china字符的行

  ^china : 匹配此以china開關(guān)的行

  china$ : 匹配以china結(jié)尾的行

  ^china$ : 匹配僅有china五個字符的行

  [Cc]hina : 匹配含有China或china的行

  Ch.na : 匹配包含Ch兩字母并且其后緊跟一個任意字符之后又有na兩個字符的行

  Ch.*na : 匹配一行中含Ch字符,并且其后跟0個或者多個字符,再繼續(xù)跟na兩字符

  二.實例

  如下通過常用實例來學(xué)習(xí)BRE和ERE匹配,源文件url.txt內(nèi)容如下:

  www.baidu.com

  http://www.baidu.com

  https://www.baidu.com

  http://wwwbaiducom

  baidu.com

  baidu

  1.url匹配

  匹配以http或者https開頭,并且其后為:并且含有.的串

  BRE匹配:

  grep '^https\{0,1\}.*\..*' url.txt

  ERE匹配:

  grep -E '^https?.*\..*' url.txt

  匹配結(jié)果如下:

  http://www.baidu.com

  https://www.baidu.com

  2.Email匹配

  示例文件內(nèi)容為:

  hfutwyy@qq.com

  aaaa@

  aaa@.com

  aaa@gmail.com

  @@baidu.com

  匹配以字母數(shù)字或者下劃線開頭的多個字符,其后有一個@之后有多個字母數(shù)字或者下劃線,其中有一個.號

  grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*\..*' email.txt

  匹配結(jié)果:

  hfutwyy@qq.com

  aaa@.com

  aaa@gmail.com

  先到這里,后續(xù)再接著寫。


看了“Linux 正則表達式詳解”還想看:

1.全面解析Linux的grep命令中正則表達式的用法

2.linux grep正則表達式與grep用法詳解

3.Linux系統(tǒng)grep正則表達式怎么用

4.linux grep命令詳解

2836523