Linux正則表達(dá)式與通配符

https://www.cnblogs.com/zoe233/p/11919424.html
https://www.jb51.net/article/186283.htm

正則表達(dá)式:在計(jì)算機(jī)科學(xué)中,是指一個(gè)用來描述或者匹配一系列符合某個(gè)句法規(guī)則的字符串的單個(gè)字符串弥锄。在很多文本編輯器或其他工具里户魏,正則表達(dá)式通常被用來檢索或替換那些符合某個(gè)模式的文本內(nèi)容。正則表達(dá)式這個(gè)概念最初是由Unix中的工具軟件(例如sed和grep)普及開的豪治。
只有掌握了正則表達(dá)式,才能全面地掌握 Linux 下的常用文本工具(例如:grep扯罐、egrep负拟、GUN sed、 Awk 等) 的用法

與正則有關(guān)的選項(xiàng)參數(shù)

grep歹河、sed掩浙、awk天然支持正則
grep -v代表反選捶牢,反向選擇匹配到的內(nèi)容
grep -E代表使用擴(kuò)展正則
grep -P代表使用Perl正則
sed -r 代表使用擴(kuò)展正則

正則表達(dá)式分類

正則表達(dá)式分為三類(man grep可以看到碴倾,分別是basic RegExs恬涧,extended RegExs个扰,perl RegExs)
1可缚、基本的正則表達(dá)式(Basic Regular Expression 又叫 Basic RegEx 簡稱 BREs)
2充坑、擴(kuò)展的正則表達(dá)式(Extended Regular Expression 又叫 Extended RegEx 簡稱 EREs)
3吵聪、Perl 的正則表達(dá)式(Perl Regular Expression 又叫 Perl RegEx 簡稱 PREs)

常用文本工具與正則表達(dá)式的關(guān)系

指令 BREs EREs PREs 處理對(duì)象
grep egrep grep grep -E
egrep grep -P
egrep -P a. 處理對(duì)象:文本文件

b. 處理過程:查找文本文件中是否包含要查找的 “關(guān)鍵字”(關(guān)鍵字可以是正則表達(dá)式) 硫嘶,默認(rèn)返回匹配的該行的內(nèi)容
c. grep|egrep處理文件時(shí)经备,按行處理 |
| sed | sed | sed -r | - | a. 處理對(duì)象:文本文件
b.處理操作:對(duì)文本文件的內(nèi)容進(jìn)行 查找拭抬、替換、刪除侵蒙、增加等操作
c. sed 在處理文本文件的時(shí)候玖喘,按行處理 |
| awk | - | awk | - | a. awk 處理的對(duì)象:文本文件
b. awk 處理操作:主要是對(duì)列進(jìn)行操作 |

三種正則比較**

字符 BREs EREs PREs 說明
轉(zhuǎn)義 \ \ \ 轉(zhuǎn)義
^ ^ ^ ^ 匹配行首,例如'^dog'匹配以字符串dog開頭的行(注意:awk 指令中蘑志,^則是匹配字符串的開始)
$ $ $ $ 匹配行尾累奈,例如:'^、dog'匹配以字符串 dog 為結(jié)尾的行(注意:awk 指令中急但,則是匹配字符串的結(jié)尾)
^$ ^$ ^$ ^$ 匹配空行
^string$ ^string$ ^string$ ^string$ 匹配行澎媒,例如:'^dog$'匹配只含一個(gè)字符串 dog 的行
\< \< \< X 同\b 匹配單詞,例如:'\<frog' (等價(jià)于'\bfrog')波桩,匹配以 frog 開頭的單詞
> \> \> 匹配單詞戒努,例如:'frog\>'(等價(jià)于'frog\b '),匹配以 frog 結(jié)尾的單詞
<x> \<x\> \<x\> 匹配一個(gè)單詞或者一個(gè)特定字符,例如:'\<frog\>'(等價(jià)于'\bfrog\b')储玫、'\<G\>'
() **X **同\(\) () () 匹配表達(dá)式侍筛,例如:不支持'(frog)'
() \(\) **X ** **X**** ** 匹配表達(dá)式,例如:不支持'(frog)'
撒穷? X(同?) 匣椰? 匹配前面的子表達(dá)式 0 次或 1 次(等價(jià)于{0,1})端礼,例如:where(is)?能匹配"where" 以及"whereis"
\? \? **X ** **X**** ** 匹配前面的子表達(dá)式 0 次或 1 次(等價(jià)于'\{0,1\}')禽笑,例如:'where\(is\)\? '能匹配 "where"以及"whereis"
?(非貪婪模式) **X ** **X ** **X**** ** 當(dāng)該字符緊跟在任何一個(gè)其他限制符(*, +, ?, {n},{n,}, {n,m}) 后面時(shí),匹配模式是非貪婪的蛤奥。非貪婪模式盡可能少的匹配所搜索的字符串佳镜,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如凡桥,對(duì)于字符串 "oooo"蟀伸,'o+?' 將匹配單個(gè)"o",而 'o+' 將匹配所有 'o'
. . . . 匹配除換行符('\n')之外的任意單個(gè)字符(注意:awk 指令中的句點(diǎn)能匹配換行符)
* * * * 匹配前面的子表達(dá)式 0 次或多次(等價(jià)于{0, })缅刽,例如:zo* 能匹配 "z"以及 "zoo"
\+ \+ X(同+) X(同+) 匹配前面的子表達(dá)式 1 次或多次(等價(jià)于'\{1, \}')望蜡,例如:'where\(is\)\+ '能匹配 "whereis"以及"whereisis"
+ X(同\+) + + 匹配前面的子表達(dá)式 1 次或多次(等價(jià)于{1, }),例如:zo+能匹配 "zo"以及 "zoo"拷恨,但不能匹配 "z"
{n} X(同{n}) {n} {n} n 必須是一個(gè) 0 或者正整數(shù),匹配子表達(dá)式 n 次谢肾,例如:
zo{2}能匹配"zooz"腕侄,但不能匹配 "Bob"
{n,} X(同\{n,\}) {n,} {n,} n 必須是一個(gè) 0 或者正整數(shù),匹配子表達(dá)式大于等于 n次芦疏,例如:go{2,}能匹配 "good"分预,但不能匹配 god
{n,m} X(同\{n,m\}) {n,m} {n,m} m 和 n 均為非負(fù)整數(shù),其中 n <= m薪捍,最少匹配 n 次且最多匹配 m 次 笼痹,例如:o{1,3}將配"fooooood" 中的前三個(gè) o(請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格)
x y X(同x\|y) x|y x|y 匹配 x 或 y,例如: 不支持'z|(food)' 能匹配 "z" 或"food"酪穿;'(z|f)ood' 則匹配"zood" 或 "food"
[0-9] [0-9] [0-9] [0-9] 匹配從 0 到 9 中的任意一個(gè)數(shù)字字符(注意:要寫成遞增)
[xyz] [xyz] [xyz] [xyz] 字符集合救赐,匹配所包含的任意一個(gè)字符,例如:'[abc]'可以匹配"lay" 中的 'a'(注意:如果元字符只磷,例如:. *等经磅,它們被放在[ ]中泌绣,那么它們將變成一個(gè)普通字符)
[^xyz] [^xyz] [^xyz] [^xyz] 負(fù)值字符集合,匹配未包含的任意一個(gè)字符(注意:不包括換行符)预厌,例如:'[^abc]' 可以匹配 "Lay" 中的'L'(注意:[^xyz]在awk 指令中則是匹配未包含的任意一個(gè)字符+換行符)
[A-Za-z] [A-Za-z] [A-Za-z] [A-Za-z] 匹配大寫字母或者小寫字母中的任意一個(gè)字符(注意:要寫成遞增)
[^A-Za-z] [^A-Za-z] [^A-Za-z] [^A-Za-z] 匹配除大小寫字母之外的任意一個(gè)字符(注意:寫成遞增)
\d 不支持 不支持 \d 匹配從 0 到 9 中的任意一個(gè)數(shù)字字符(等價(jià)于 [0-9])
\D 不支持 不支持 \D 匹配非數(shù)字字符(等價(jià)于 [^0-9])
\S 不支持 不支持 \S 匹配任何非空白字符(等價(jià)于[^\f\n\r\t\v])
\s 不支持 不支持 \s 匹配任何空白字符阿迈,包括空格、制表符配乓、換頁符等等(等價(jià)于[ \f\n\r\t\v])
\W \W \W \W 匹配任何非單詞字符 (等價(jià)于[^A-Za-z0-9_])
\w \w \w \w 匹配包括下劃線的任何單詞字符(等價(jià)于[A-Za-z0-9_])
\B \B \B \B 匹配非單詞邊界仿滔,例如:'er\B' 能匹配 "verb" 中的'er',但不能匹配"never" 中的'er'
\b \b \b \b 匹配一個(gè)單詞邊界犹芹,也就是指單詞和空格間的位置崎页,例如: 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的'er'
\t 不支持 不支持 \t 匹配一個(gè)橫向制表符(等價(jià)于 \x09和 \cI)
\v 不支持 不支持 \v 匹配一個(gè)垂直制表符(等價(jià)于 \x0b和 \cK)
\n 不支持 不支持 \n 匹配一個(gè)換行符(等價(jià)于 \x0a 和\cJ)
\f 不支持 不支持 \f 匹配一個(gè)換頁符(等價(jià)于\x0c 和\cL)
\r 不支持 不支持 \r 匹配一個(gè)回車符(等價(jià)于 \x0d 和\cM)
\\ \\ \\ \\ 匹配轉(zhuǎn)義字符本身"\"
\cx 不支持 不支持 \cx 匹配由 x 指明的控制字符腰埂,例如:\cM匹配一個(gè)Control-M 或回車符飒焦,x 的值必須為A-Z 或 a-z 之一,否則屿笼,將 c 視為一個(gè)原義的 'c' 字符
\xn 不支持 不支持 \xn 匹配 n牺荠,其中 n 為十六進(jìn)制轉(zhuǎn)義值。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長驴一,例如:'\x41' 匹配 "A"休雌。'\x041' 則等價(jià)于'\x04' & "1"。正則表達(dá)式中可以使用 ASCII 編碼
\num 不支持 \num 匹配 num肝断,其中 num是一個(gè)正整數(shù)杈曲。表示對(duì)所獲取的匹配的引用
[:alnum:] [:alnum:] [:alnum:] [:alnum:] 匹配任何一個(gè)字母或數(shù)字([A-Za-z0-9]),例如:'[[:alnum:]] '
[:alpha:] [:alpha:] [:alpha:] [:alpha:] 匹配任何一個(gè)字母([A-Za-z])胸懈, 例如:' [[:alpha:]] '
[:digit:] [:digit:] [:digit:] [:digit:] 匹配任何一個(gè)數(shù)字([0-9])担扑,例如:'[[:digit:]] '
[:lower:] [:lower:] [:lower:] [:lower:] 匹配任何一個(gè)小寫字母([a-z]), 例如:' [[:lower:]] '
[:upper:] [:upper:] [:upper:] [:upper:] 匹配任何一個(gè)大寫字母([A-Z])
[:space:] [:space:] [:space:] [:space:] 任何一個(gè)空白字符: 支持制表符趣钱、空格涌献,例如:' [[:space:]] '
[:blank:] [:blank:] [:blank:] [:blank:] 空格和制表符(橫向和縱向),例如:'[[:blank:]]'ó'[\s\t\v]'
[:graph:] [:graph:] [:graph:] [:graph:] 任何一個(gè)可以看得見的且可以打印的字符(注意:不包括空格和換行符等)首有,例如:'[[:graph:]] '
[:print:] [:print:] [:print:] [:print:] 任何一個(gè)可以打印的字符(注意:不包括:[:cntrl:]燕垃、字符串結(jié)束符'\0'、EOF 文件結(jié)束符(-1)井联, 但包括空格符號(hào))利术,例如:'[[:print:]] '
[:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] 任何一個(gè)控制字符(ASCII 字符集中的前 32 個(gè)字符,即:用十進(jìn)制表示為從 0 到31低矮,例如:換行符印叁、制表符等等),例如:' [[:cntrl:]]'
[:punct:] [:punct:] [:punct:] [:punct:] 任何一個(gè)標(biāo)點(diǎn)符號(hào)(不包括:[:alnum:]、[:cntrl:]轮蜕、[:space:]這些字符集)
[:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] 任何一個(gè)十六進(jìn)制數(shù)(即:0-9昨悼,a-f,A-F)

基礎(chǔ)正則表達(dá)式說明

  1. ^ 以...開頭
    • ^d 以d開頭
    • ^word 匹配以word開頭的內(nèi)容
    • 在vi/vim編輯器里跃洛,^代表一行的開頭
  2. $ 以...結(jié)尾
    • word$ 匹配以word結(jié)尾的內(nèi)容
    • 在vi/vim編輯器里率触,$代表一行的結(jié)尾
  3. ^$ 表示空行
  4. 代表且只能代表任意一個(gè)字符
  5. \ 轉(zhuǎn)義符號(hào)
    • 讓特殊符號(hào)代表其本身
    • 重復(fù)0個(gè)或多個(gè)前面的一個(gè)字符
    • 例如:o* 匹配,沒有"o"汇竭,有1個(gè)"o"葱蝗,或多個(gè)"o"
  6. .* 匹配所有字符
    • 延伸:
      • ^.*以任意多個(gè)字符開頭
      • .*$ 以任意多個(gè)字符結(jié)尾
  7. [abc] 匹配字符集合內(nèi)的任意一個(gè)字符[a-zA-Z],[0-9]细燎。
  8. [^abc] 匹配不包含^后的任意一個(gè)字符的內(nèi)容 []內(nèi)的^ 為取反两曼,注意和中括號(hào)外面的^(以...開頭的區(qū)別)
    • a{n,m} 重復(fù)n到m次,前一個(gè)重復(fù)的字符玻驻。
      • 如果用egrep 或 sed -r 可以去掉斜線
      • grep -E 也可以去掉斜線
    • a{n,} 重復(fù)至少n次悼凑,前一個(gè)重復(fù)的字符。
      • 如果用egrep 或 sed -r 可以去掉斜線
      • grep -E 也可以去掉斜線
    • a{n} 重復(fù)n次璧瞬,前一個(gè)重復(fù)的字符户辫。
      • 如果用egrep 或 sed -r 可以去掉斜線
      • grep -E 也可以去掉斜線
    • a{,m} 重復(fù)最多m次
      • grep -E 也可以去掉斜線

注意:egrep 或 sed -r 默認(rèn)使用擴(kuò)展正則表達(dá)式(EREs),一般特殊字符({})可以不轉(zhuǎn)義

擴(kuò)展正則表達(dá)式說明

grep -E 以及egrep(Extend Regular Expression)

    • 表示重復(fù)“一個(gè)或一個(gè)以上”前面的字符(* 是 0 個(gè)或多個(gè))
  1. 嗤锉? 表示重復(fù) “0個(gè)或1個(gè)”前面的字符(. 是有且只有1個(gè))
  2. | 表示同時(shí)過濾多個(gè)字符串
  3. () 分組過濾渔欢,后向引用

通配符

Linux通配符和三劍客的正則表達(dá)式是不一樣的,因此瘟忱,代表的意義也有較大的區(qū)別奥额。
通配符一般用戶命令行bash環(huán)境,而linux正則表達(dá)式用于grep, sed, awk場景酷誓。

通配符說明

    • 代表任意0-N個(gè)字符,代表所有字符
  • ? 代表任意1個(gè)字符
  • ; 連續(xù)不同命令的分隔符
  • 配置文件注釋

  • | 管道:效率并不高
  • ~ 當(dāng)前用戶的家目錄
    • 上一次的目錄
    • 例如:cd - 進(jìn)入上一次的目錄
  • $ 變量前需要加的符號(hào)
    • 例如:echo $LANG 輸出變量的內(nèi)容
  • / 路徑分隔符號(hào)态坦,也是根
  • 1> 重定向盐数,覆蓋

  • 追加重定向,追加內(nèi)容到文件尾部

  • < 輸入重定向(xargs伞梯,tr)
  • << 追加輸入重定向(cat)

示例:* 的使用:代表任意0-N個(gè)字符玫氢,代表所有字符

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谜诫,隨后出現(xiàn)的幾起案子漾峡,更是在濱河造成了極大的恐慌,老刑警劉巖喻旷,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件生逸,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)槽袄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門烙无,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人遍尺,你說我怎么就攤上這事截酷。” “怎么了乾戏?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵迂苛,是天一觀的道長。 經(jīng)常有香客問我鼓择,道長三幻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任惯退,我火速辦了婚禮赌髓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘催跪。我一直安慰自己锁蠕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布懊蒸。 她就那樣靜靜地躺著荣倾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骑丸。 梳的紋絲不亂的頭發(fā)上舌仍,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音通危,去河邊找鬼铸豁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛菊碟,可吹牛的內(nèi)容都是我干的节芥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼逆害,長吁一口氣:“原來是場噩夢啊……” “哼头镊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起魄幕,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤相艇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后纯陨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坛芽,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡留储,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了靡馁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欲鹏。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖臭墨,靈堂內(nèi)的尸體忽然破棺而出赔嚎,到底是詐尸還是另有隱情,我是刑警寧澤胧弛,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布尤误,位于F島的核電站,受9級(jí)特大地震影響结缚,放射性物質(zhì)發(fā)生泄漏损晤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一红竭、第九天 我趴在偏房一處隱蔽的房頂上張望尤勋。 院中可真熱鬧,春花似錦茵宪、人聲如沸最冰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暖哨。三九已至,卻和暖如春凰狞,著一層夾襖步出監(jiān)牢的瞬間篇裁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工赡若, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留达布,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓逾冬,卻偏偏與公主長得像黍聂,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子粉渠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容