您好,登錄后才能下訂單哦!
這篇文章主要講解了“Linux正則表達式怎么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Linux正則表達式怎么用”吧!
一.linux文本查找命令
在說linux正規表達式之前,還介紹下linux中查找文本文件常用的三個命令:
1.grep : 最早的文本匹配程序,使用POSIX定義的基本正則表達式(BRE)來匹配文本。
2.egrep : 擴展式grep,其使用擴展式正規表達式(ERE)來匹配文本。
3.fgrep : 快速grep,這個版本匹配固定字符串而非正則表達式。并且是唯一可以并行匹配多個字符串的版本。
如下簡單的介紹grep命令:
語法格式:
grep [options ...] pattern-spec [files ...]
用途:
匹配一個或多個模式的文本行。
options:
-E : 使用擴展正則表達式進行匹配, grep -E 或取代 egrep 命令。
-F : 使用固定字符串進行匹配, grep -F 或取代傳統的fgrep命令。
-e : 通常第一個非選項的參數認為是要匹配的模式,也可以同時提供多個模式,只要將其放入單引號,并用換行字符分隔他們。
模式以減號開頭時,為防止混淆其為選項,-e選項說明其后的參數為模式,即使他以減號開頭。
-f : 從pat-file文件讀取模式作為匹配。
-i : 模式匹配時忽略大小寫差異。
-l : 列出匹配模式的文件名稱,而不是打印匹配的行。
-q : 靜默的,如果匹配成功,不將匹配的行輸出到標準輸出;否則即是不成功。
-s : 不顯示錯誤信息,通常與-q并用。
-v : 顯示不匹配模式的行。
說明:可以同時查找多個文件中的內容,當指定多個文件時,每個顯示出的文件行前會有文件名加一個冒號標識其來自哪個文件。
可以使用多個-e 或 -f 選項,建立要查找的模式列表。
二.正則表達式簡要介紹
1.正則表達式的組成
(1).一般字符:沒有特殊意義的字符
(2).特殊字符(meta字符):元字符,有在正則表達式中有特殊意義
2.如下講下正則表達式中的常見meta字符
(1).POSIX BRE與ERE中都有的meta字符:
\ : 通常用于打開或關閉后續字符的特殊含義,如\(...\)與\{...\}
. : 匹配任何單個字符(除NUL)
* : 匹配其前的任何數目或沒有的單個字符,例: . 表示任一字符, 則 .* 匹配任一字符的任意長度
^ : 匹配緊接著的正則表達式,BRE中僅在正則表達式的開頭有特殊的含義,ERE中在任何位置都有特殊含義
$ : 匹配前面的正則表達式,在字符串或者行結尾處。BRE中僅在正則表達式的結尾處有特殊的含義,ERE中在任何位置都有特殊含義
[] : 匹配方括號內的任一字符,其中可用連字符(-)指的連續字符的范圍;^符號苦出現在方括號的第一個位置,則表示匹配不在列表中的任一字符,
(2).POSIX BRE中才有的字符:
\{n,m\} : 區間表達式,匹配在它前面的單個字符重現的次數區別。\{n\}指重現n次;\{n,m\}指重現n至m次;
\( \) : 保留空間,可以將最多9個獨立的子模式存儲在單個模式中。如\(ab\).*\1 : 指匹配ab組合的兩次重現,中間可存在任意數目的字符。
\n : 重復在\(與\)方括號內第n個子模式至此點的模式。
(3).POSIX ERE中才有的字符:
{n,m} : 與BRE的\{n,m\}功能相同
+ : 匹配前面正則表達式的一個或多個擴展
? : 匹配前面正則表達式的零個或一個擴展
| : 匹配|符號前或后的正則表達式
( ) : 匹配方括號括起來的正則表達式群
(4). 方括號([])表達式
4.1.字符集 [: :]
標識字符集,有如下幾種:
[::alnum] : 數字字符 | [:digit:] : 數字字符 | [:punct:] : 標點符號字符 |
[:alpha:] : 字母字符 | [:graph:] : 非空格字符 | [:space:] : 空格字符 |
[:blank:] : 空格與定位字符 | [:lower:] : 小寫字母字符 | [:upper:] : 大寫字母字符 |
[:cntrl:] : 控制字符 | [:print:] : 可顯示的字符 | [:xdigit:] : 16進制數字 |
4.2.排序符號
指將多個字符視為一個符號,如[.ch.]即將ch視為一個符號
4.3.等價字符
認為多個字符相等,如[=e=]在法文的locale里,可匹配于多種與e相似的字符,此處不再列出。
說明:這三種構造除其自身的方括號之外,還必須使用額外的方括號括起來。
例 : [[:alpha:]!] : 匹配任一英文字母或感嘆號。
[[.ch.] : 匹配ch排序元素,而不匹配單獨的字母c或h.
3.簡單正規表達式匹配案例
china : 匹配此行中任意位置有china字符的行
^china : 匹配此以china開關的行
china$ : 匹配以china結尾的行
^china$ : 匹配僅有china五個字符的行
[Cc]hina : 匹配含有China或china的行
Ch.na : 匹配包含Ch兩字母并且其后緊跟一個任意字符之后又有na兩個字符的行
Ch.*na : 匹配一行中含Ch字符,并且其后跟0個或者多個字符,再繼續跟na兩字符
二.實例
如下通過常用實例來學習BRE和ERE匹配,源文件url.txt內容如下:
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
匹配結果如下:
http://www.baidu.com
https://www.baidu.com
2.Email匹配
示例文件內容為:
hfutwyy@qq.com
aaaa@
aaa@.com
aaa@gmail.com
@@baidu.com
匹配以字母數字或者下劃線開頭的多個字符,其后有一個@之后有多個字母數字或者下劃線,其中有一個.號
grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*\..*' email.txt
匹配結果:
hfutwyy@qq.com
aaa@.com
aaa@gmail.com
先到這里,后續再接著寫。
感謝各位的閱讀,以上就是“Linux正則表達式怎么用”的內容了,經過本文的學習后,相信大家對Linux正則表達式怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。