《Linux Shell》筆記之正則表示式
- 正則表示式概念
正則表示式的文法分為3種標準:BRE、ERE 和 ARE。其中 BER 和 ERE 屬於 POSIX 標準,ARE 則是由各家定義的擴充套件
BRE:基本正則表示式
ERE:在BRE基礎上,擴充套件正則表示式
什麼是POSIX呢,POSIX Portable Operating System Interface 可移植作業系統介面, (BRE, ERE)的應用。
正則表示式的基本字元匹配:特殊字元(meta character 元字元)和一般字元。
什麼是元字元:特殊意義的專用字元(如"*","+","?","."等),用一個或者一組元字元代替一個或多個字元。舉個例子: 元字元*用來匹配0個或多個的前一字元;而元字元. 用來匹配一個任意的一個字元
什麼是一般字元:原義正常文字字元(非元字元),例如:'*grep' 匹配所有一個或多個任意字元後緊跟grep,grep就是一般字元。
- 常見linux命令及他們預設使用的正則表示式型別
grep |
sed |
vi |
egrep |
awk |
BRE |
* |
* |
* |
|
ERE |
* |
* |
- grep: 加上-E,開啟ERE模式
- BRE和ERE 都支援的元字元
字元 |
BRE/ERE |
模式含義 |
^ |
BRE,ERE |
行或字串的開始;如:'^abcd' 匹配所有以abcd開頭的行 |
$ |
BRE,ERE |
行或字串的結束,如:'abcd$' 匹配以abcd結尾的行 |
. |
BRE,ERE |
匹配一個非換行符的字元 (1); 如:'a.b' 匹配a後接一個任意字元,然後是b,將匹配 aAb, a1b, acb, [email protected]等 如: '.b' 匹配 ab,1b,@b …等 |
* |
BRE,ERE |
匹配零個或多個正則表示式前面的字元 (0-n) 如:'ac*d' 匹配a後接零個或多個前面的字元,將匹配:ad, acd, accd, acccd …等 注意:星號不能放在首位, 星號前面必須有單個字元,經常我們使用 .*表示任意數目字元,但不能直接把星號放在首位如 '*d' |
[…] |
BRE,ERE |
匹配方括號內任意一個字元(1); 如:"[Ab]cde" 匹配Abcd和abcd
如:"[0-9]abc"匹配abc前面的任意一個數字:0abc, 1abc, 2abc, 012abcd, 0123abcd …… [a-z] 123 匹配123前面的任意一個小寫母如:a123, b123, ab123, abc123 [A-Z] 123 匹配123前面的任意一個大寫母如:A123, B123, AB123, ABC123 [a-zA-Z0-9]表示匹配任意一個數字和大小寫英文字母; [a-bA-Z0-9!]表示所有的大小寫字母,數字和感嘆號; 其它的形式有:[A-Z],[AB-Z],[A-YZ],[AB-YZ],[A-DE-Z] 不支援形式有:[A-D-Z],[AB-D-Z],[A-D-YZ] 如果^符號位於方括號的開始,則具有相反含義:不匹配方括號中的任意字元。 如:'[^A-FH-Z]rep' 匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行;或者[^A-Z]rep |
\ |
BRE,ERE |
通常用於關閉其後續字元的特殊意義,恢復其原意。 如:\(...\),這裡的括號僅僅表示括號。 |
4. BRE 和ERE支援不同的元字元
字元 |
BRE |
模式含義 |
\(\) |
BRE |
將圓括號之間的模式儲存在特殊“保留空間”。最多可以將9個獨立的子模式儲存在單個模式中。匹配於子模式的文字,可以通過轉義序列\1到\9,被重複使用在相同模式裡。 如'\(abc\).*\1' 匹配兩個abc中間帶有任意數目的字元,第二個abc使用\1來引用。最多可以儲存9個獨立的模式,即從\1到\9; 簡單說:將abc放在保留空間,使用\1引用abc; 注意:必須使用 .* \(ab\).*\1 匹配: abab,ab1ab1, ab12ab1, ab123ab1….等 \(ab\).*\1.*\(de\).*\2 匹配ab1ab1def1de1, ab12ab12de12de1….等 |
\n |
BRE |
重複在\內的第n個模式。n為1到9,n是數字. |
x\{m, n\} |
BRE |
匹配x字元出現的次數區間。x\{n\}是指x出現n次;x\{m,\}是指x出現至少m次;x\{m,n\}指x至少出現m次,至多出現n次. 如:ab\{2\}匹配abb;ab\{2,\}表示abb、abbb等。ab\{2,4\}表示abb、abbb和abbbb。 |
x{m, n} |
ERE |
其功能等同於上面的\{n,m\},只是不再寫\轉義符了。 匹配x字元出現的次數區間。x\{n\}是指x出現n次;x\{m,\}是指x出現至少m次;x\{m,n\}指x至少出現m次,至多出現n次. m表示最小值,n表示最大值 如:ab{2}匹配abb;ab{2,}表示abb、abbb等。ab{2,4}表示abb、abbb和abbbb。 |
+ |
ERE |
與*相比,匹配前面正則表示式的一個或多個例項 (1-n) 如:ab+c 匹配abc,abbc,abbbc ….等 |
? |
ERE |
匹配前面正則表示式的零個或一個例項 (0-1) 如:ab?c 匹配ac, abc |
| |
ERE |
匹配|前面或後面的正則表示式 如:'ab|cd'匹配ab, cd, abcd |
() |
ERE |
匹配用括號括起來的正則表示式群; 如:參見11的分組例子 |
- grep 程式支援的元字元plus
字元 |
模式含義 |
\< |
單詞的開始,如:'\<ab' 匹配包含以ab開頭的單詞的行 |
\> |
單詞的結束,如:'ab\>'匹配包含以ab結尾的單詞的行 如:匹配單詞開頭+word+結尾 [email protected]> echo this is a word. |grep '\<word\>' this is a word. |
\w |
匹配文字和數字字元,也就是[A-Za-z0-9] 如:'G\w*p' 匹配以G後跟零個或多個文字或數字字元,然後是P ;'G\w*p' 匹配 G123456abp |
\W |
\w的反置形式,匹配一個或多個非單詞字元,如點號,句號等 如:'G\W*p' 匹配G...:p |
\b |
單詞鎖定符 如:'\bhello\b'只匹配hello 如:''er\b'' 可以匹配"never" 中的''er'',但不能匹配 "verb"中的 ''er''。 awk使用\y表示此功能 |
\B |
正則表示式之後或者之前不能是空格 如: ''er\B''能匹配"verb"中的''er'',但不能匹配"never"中的 ''er'' (er是結束位置,不能匹配) |
\`\` |
分別匹配緩衝區的開頭和結尾。通常視為^和$同義 |
例項:
[email protected]>cat aa.regular
aatestaa
west123es123
[email protected]>cat bb.regular
bbtestbb
[email protected]>cat cc.regular
cctestcc
[email protected]>ls -l |grep '\<aa' #列出以aa開頭的檔案
[email protected]>grep 'test' c* #顯示以c開頭的檔案中包含test的行
Cctestcc
[email protected]>grep 'test' a* b* c* #顯示以a,b,c開頭的檔案中包含的test的行
aa.regular:aatestaa
bb.regular:bbtestbb
cc.regular:cctestcc
[email protected]>grep '[a-z]\{5\}' a* #顯示以a開頭的檔案中,至少有5個連續小寫字母的字串的行
aatestaa
[email protected]>grep 'w\(es\)t.*\1' a* #顯示以a開頭的檔案中,包含west並且重複出現過一次es
west123es123
- 特殊字元類 (為了在不同國家的字元編碼保持一致)
6.1 POSIX 字符集
模式含義 |
|
[::alnum] |
匹配文字和數字字元,等效於A-Za-z0-9 如:ab[[::alnum]] 匹配abc,ab1 |
[:alpha:] |
匹配文字字元; 如:ab[[:alpha:]] 匹配abc |
[:blank:] |
匹配空格space與定位tab字元 |
[:cntrl:] |
匹配控制字元 |
[:digit:] |
匹配數字字元 |
[:graph:] |
匹配非空格字元 |
[:lower:] |
匹配小寫字母字元 |
[:print:] |
匹配非空字元(包括空格) |
[:punct:] |
匹配標點符號字元 |
[:space:] |
匹配空格字元 (新行,空格,製表符) |
[:upper:] |
匹配大寫字母字元 |
[:xdigit:] |
匹配16進位制數字 |
例項:#匹配一個或多個數字字元或下劃線"_"
[email protected]>echo this num is 123_456 |grep -E '[[:digit:]_]+'
this num is123_456
[email protected]>echo this num is 123456 |grep -E '[[:digit:]_]+'
this num is123456
[email protected]>echo this num is _ |grep -E '[[:digit:]_]+'
this num is _
- 此外,還有以下特殊字元類:
perl類 等效POSIX表示式 描述
----------------------------------------------------------------------------
\o [0-7] |
八進位制數字 |
\O [^0-7] |
非八進位制數字 |
\w [[:alnum:]_] |
單詞構成字元 |
\W [^[:alnum:]_] |
非單詞構成字元 |
\A [^[:alpha:]] |
非字母 |
\L [^[:lower:]] |
非小寫字母 |
\U [^[:upper:]] |
非大寫字母 |
\S [^[:space:]] |
非空格符 |
\D [^[:digit:]] |
非數字 |
\X [^[:xdigit:]] |
非十六進位制數字 |
\P [^[:print:]] |
非可列印字元 |
- 還可以使用以下特殊字元換碼序列:
\r |
回車 |
\n |
換行 |
\b |
退格 |
\t |
製表符 |
\v |
垂直製表符 |
\" |
雙引號 |
\' |
單引號 |
6.2 排序符號
多個字元序列視為一個元素,它使用[.和.]將字元組合括起來。例如,[.cn.]就表示cn字元序列,而單獨的c或n都不行
6.3 等價字符集
等價字符集表示應視為等值的一族字元,使用[=和=]將字元括起來。例如,e和ê,在法語的local 裡,"[[=e=]]" 可能匹配於e/é/è/ê
- 單個字元匹配
7.1 一般字元
7.2 轉移meta字元
例如:\.就真表示一個點;\[左方括號;\\表示反斜槓
7.3 . (點號)字元
".hina"表示"任一字元";很少單獨使用,多與其他字元混合匹配多個字元
7.4 方括號表示式
例如:
[cC]hina匹配china 和China;
[^abd]hina匹配除了abd 3個小字母外的任意字母,加上hina.(包括:所有大寫字母,數字,標點符號等)
[a-zA-Z0-9]hina, 匹配[a-z],[A-Z],[0-9]加上hina
- 單個表示式匹配多個字元
8.1 星號字元的應用
- ab*c ab和c之間匹配0個或多個字元, 即ac,abc,abbc,abbbc……
- a.*c a和c之間匹配0個或多個字元 , 即 ac, abc, adc, abbc, accccc …….
- a.c a和c之間匹配單個字元, 即 acc, abc, aac, a!c等
8.2 區間表示式的應用
- ab\{3\}c a和c之間的b字母重現3次,即 abbbc
- ab\{3,\}c a和c之間的b重現至少3次,即 abbbc, abbbbc
- ab\{3,5\} a和c之間的b字母重現3次到5次,即abbbc, abbbbc, abbbbbc
- a\{5\} a重現5次
- b\{7,10\} b重現7次到10次
8.3 匹配多個字元例項
- ab?c 即ac和abc
- ab+c 即abc, abbc, abbbc…..但是不匹配ac
+字元的概念和*有點相似,但是+字元要求前置正則表示式至少出現一次
- 文字匹配錨點
例項:
字串: abcxxxABCabcxxxefg
^abc 匹配字串開頭的3個字母abc, 例如 abcxxxABCabcxxxefg
^ABC 匹配字串開頭的ABC
efg$ 匹配結尾處的efg ,$表示結尾,即abcxxxABCabcxxxefg
^$ 匹配空的字串或者空行
- 運算子優先順序
BRE運算優先順序
運算子 |
含義 |
[..] [==][::] |
方括號符號 |
\meta |
轉義的meta字元 |
[] |
方括號表示式 |
\(\)\n |
後向應用表示式 |
*\{\} |
區間表示式和星號表示式 |
無符號 |
連續 |
^$ |
錨點 |
- ERE中的運算優先順序
運算子 |
含義 |
[..][==][::] |
方括號符號 |
\meta |
轉移的meta字元 |
[] |
方括號表示式 |
() |
分組 |
*+? {} |
重複前置的正則表示式 |
無符號 |
連續 |
^$ |
錨點 (匹配空行) |
| |
交替 |
11.更多差異 (後向引用,分組,交替)
11.1 後向引用 (BRE)
使用\(和\) 括起想要之後引用的部分,使用\1-\9引用之前選定的部分
例如: \(ab\)\(cd\)[efg]*\1\2
ab被括起來,之後使用\1引用;cd被括起來,之後使用\2引用;
[efg]* 表示:e或f或g,或空;
匹配的一些字串是: abcdabcd, abcdeabcd, abcdfabcd, abcdgabcd
例如:\(go\).*\1
匹配的一些字串是: gogo,go1go, go12go, go123go….等
11.2 交替 (ERE)
例如:you|me 匹配you 或者me
11.3 分組 (ERE)
匹配重複情況;如:(go)+匹配一個或者多個連續的go
例子:
man|woman+ 匹配字串: man, woman, womann, womannn
(man|woman)+ 匹配字串:man,woman, manman,womanwoman
參考書籍:linux shell 從入門到精通
相關推薦
Linux Shell筆記之正則表示式
Linux中,兩種流行的正則表示式引擎 1.POSIX基本正則表示式(BRE)引擎 2.POSIX擴充套件正則表示式(ERE)引擎 sed編輯器只實施了BRE引擎規範的子集 gawk程式使用ERE引擎一、基本正則表示式BRE 1.純文字 # echo "This is a test"| sed -n '/th
《Linux Shell》筆記之正則表示式
正則表示式概念 正則表示式的文法分為3種標準:BRE、ERE 和 ARE。其中 BER 和 ERE 屬於 POSIX 標準,ARE 則是由各家定義的擴充套件 BRE:基本正則表示式 ERE:在BRE基礎上,擴充套件正則表示式 什麼是POSIX呢,POSIX Portable Operating Syste
[一天幾個linux命令] shell指令碼之正則表示式
shell指令碼之正則表示式 原文連結:Linux–shell指令碼之正則表示式 概念及特點 概念 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定的字元、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。規定一些特殊語
Shell學習之正則表示式-----grep
grep 1. 作用 Linux系統中grep命令是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹 配的行打印出來。grep全稱是Global Regular Expression Print,表示全域性正則表示式版本,它的使用許可權是所有使用者。 grep家族包括gre
js學習筆記之正則表示式
正則表示式:本質用來記錄文字規則的編碼 構成:由一些普通字元和元字元構成 建立正則表示式兩種方式: 1.通過建構函式定義:var 變數名 = new RegExp(/表示式/); 2.通過直接量定義: var 變數名 = /表示式/; \d表示數字 test()方法:正則物件方法,檢
python學習筆記之正則表示式1
正則表示式 正則表示式即RE,我們可以使用正則表示式來匹配字串集,其實正則表示式是一個小型的程式語言。它可以方便我們對於文字任務的操作。 對於python來說,re模組就是正則式操作模組。 元字元:元字元是特殊的字元,普通的字元在正則表示式中都可以用來匹配自己,如正則表示
shell指令碼之正則表示式、函式、grep、sed、awk、printf等基本命令配置詳解
一、正則表示式 簡介: 正則表示式(或稱Regular Expression,簡稱RE)就是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字元模式與所搜尋的字串進
Python學習筆記之正則表示式
1、import re # 匯入python正則表示式模組2、正則匹配兩種方式:p = re.compile(r'imooc') # 生成Pattern物件 res = p.match('imooc python') # 呼叫 patern 物件的 matc
shell指令碼學習筆記 (正則表示式)
正則表示式一般有三個部分組成,他們分別是:字元類,數量限定符,位置限定符。規定一些特殊語法表示字元類、數 量限定符和位置關係,然後用這些特殊語法和普通字元一起表示一個模式,這就是正則
Linux作業系統基礎操作之正則表示式
grep命令 是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。grep全稱是Global Regular Expression Print格式: grep [-acinv] ‘keyword’ filename -a:在二進位制檔案用文字方式查詢word字串 -c:計算找到wo
linux之正則表示式中特殊符號的含義
廢話不說,直接上圖 萬用字元與正則表示式 容易混淆,首先要明白二者是不同的,個人感覺萬用字元用於Linux的shell命令(如檔名相關操作)中,而正則表示式用於文字內容中的字串
shell之正則表示式
一 正則表示式 正則表示式:描述某些字串匹配規則的工具 使用原因:程式設計過程中不可避免的遇到處理某些文字情況,有時候要查詢符合某些比較複雜規則的字串。正則表示式以非常簡單的程式碼完成。 常見的支援正則表示式的UNIX工具: grep命令族:用於匹配文字行 se
馬哥學習李洋個人筆記之-----正則表達式
正則表達式正則表達式 什麽是正則表達式?正則表達式就是為了處理大量的文本|字符串而定義的一套規則和方法,通過定義的這些特殊符號的輔助,就可以快速過濾,替換或輸出需要的字符串。Linux正則表達式一般以行為單位處理。 即: 1 正則表達式是一種描述一組字符串的模式。2 為處理大量文本|字符串而定義的一套規則
Python課堂筆記之正則表達式
小寫 多個 一個 指定 pytho 找到 IT groups 表達 正則表達式的基本使用re.match(r’xxx’, 匹配的字符串) 嘗試從字符串的起始位置匹配一個模式匹配成功re.match方法返回一個匹配的對象,否則返回None。可以使用group(num) 或 g
shell學習之正則表達式
passwd 過濾 表達式 roo 輸出 shel 數字和字母 {} 轉義 一、grep使用...語法: grep [-cinvABC] ‘word‘ filename -c :打印符合要求的行數 -i :忽略大小寫 -n :在輸出符合要求的行的同時連同行號一起輸出
JS應用之正則表示式
定義 正則表示式是用於匹配字串中字元組合的模式。 建立正則表示式 兩種方式: 1.new RegExp() let pattern1 = new RegExp('cat'); //第一個引數字串 let pattern2 = new RegEXP('cat', 'ig'); //第二個引數可選模式
【轉】Python之正則表示式(re模組)
【轉】Python之正則表示式(re模組) 本節內容 re模組介紹 使用re模組的步驟 re模組簡單應用示例 關於匹配物件的說明 說說正則表示式字串前的r字首 re模組綜合應用例項 參考文件 提示: 由於該站對MARKDOWN的表格支援的不是很好,所以本文中的表
js中string之正則表示式replace方法詳解
本篇文章主要介紹了js中string之正則表示式replace方法詳解,replace方法是javascript涉及到正則表示式中較為複雜的一個方法,嚴格上說應該是string物件的方法。 replace方法是javascript涉及到正則表示式中較為複雜的一個方法,嚴格上說應該是string物
week4:函式之正則表示式
一、正則表示式 string提供的方法是完全匹配 引入正則表示式是模糊匹配,內嵌在python中,通過呼叫Re模組來實現 二、字元匹配(普通字元,元字元): 普通字元:大多數字符和字母都會和自身匹配 re.findall('alex','yuanalesalexduye') ##
jmeter後置處理器之正則表示式
一、基本用法——提取某個值 場景:提取某個值,儲存成變數,供後面的介面使用 步驟: 1、執行指令碼,從響應結果中查詢要提取的值,找到左右邊界。 例如要獲取“patientInfoId”作為下一個請求的引數,"patientInfoId":"2c92e0e66680b7da01668