【記錄】正則表達(dá)式學(xué)習(xí)

原文地址:http://www.zouzhipeng.com/2017/05/24/%E3%80%90%E8%AE%B0%E5%BD%95%E3%80%91%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%AD%A6%E4%B9%A0/

本文是慕課網(wǎng) 《實(shí)例妙解sed 和 awk 的秘密》 的學(xué)習(xí)記錄的第一部分:正則表達(dá)式形葬。

Linux 三大利器: grep, sed, awk.

1. 準(zhǔn)備工作

正則表達(dá)式應(yīng)用場(chǎng)景:查找、取出性含、匹配符合條件的字符或字符串

學(xué)習(xí)方法:從小到大位他、組合的過(guò)程晦攒。單個(gè)字符->字符串->表達(dá)式喇肋。

grep 搜索命令匹配正則表達(dá)式例子

$ grep 'root' passwd
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false

2. 正則單個(gè)字符的表示方式

1. 特定字符

某個(gè)具體的字符示弓,如 '1', 'a'

使用 grep 搜索命令進(jìn)行正則表達(dá)式的匹配

$ grep '1' passwd
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
_scsd:*:31:31:Service Configuration Service:/var/empty:/usr/bin/false
_eppc:*:71:71:Apple Events User:/var/empty:/usr/bin/false
...

匹配結(jié)果被標(biāo)紅

2. 范圍內(nèi)字符

  • 單個(gè)字符 []

數(shù)字字符:[0-9], [278], 表示2/7/8, 注意只匹配一個(gè)字符损拢。

$ grep '[0-9]' passwd
  • 小寫(xiě)字符:[a-z]

  • 大寫(xiě)字符:[A-Z]

  • 大小寫(xiě):[a-zA-Z]

  • 符號(hào): [,:!%-().]

  • 反向字符: ^, 必須放在范圍之前,[]內(nèi)部被碗,如

$ grep '[^0-9]' passwd

3. 任意字符

代表任何一個(gè)字符: .

注意 ., \., [.] 的區(qū)別某宪,其中后兩個(gè)的作用是一樣的。

4. 其他常用字符

  • 邊界字符/頭尾字符

頭字符 ^root, 表示以root開(kāi)頭的行锐朴,注意與取反字符 [^0-9] 的區(qū)別

尾字符 false$, 表示以false結(jié)尾的行兴喂。

$ grep '^root' passwd
root:*:0:0:System Administrator:/var/root:/bin/sh

$ grep 'false$' passwd
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
daemon:*:1:1:System Services:/var/root:/usr/bin/false
...

空行: ^$, 頭尾相接。

  • 元字符(代表普通字符或特殊字符)

實(shí)質(zhì)上起替代的作用

\w: 匹配任何字類(lèi)字符,即字母數(shù)字下劃線 [a-zA-Z0-9_]

\W: 匹配任何非字類(lèi)字符衣迷,即 [^a-zA-Z0-9_]

\b: 代表單詞的分隔

grep '\btime\b' file

只匹配包含單詞 time 的行畏鼓,不匹配 timezone,showtime 等蘑险。

3. 字符組合

1. 字符串

'root', '1000', 'r..t' (r開(kāi)頭滴肿,t結(jié)束岳悟,長(zhǎng)度為4的字符串)

'[A-Z][a-z]' (一個(gè)大寫(xiě)字母加一個(gè)小寫(xiě)字母)

'[0-9][0-9]' (兩個(gè)連續(xù)的數(shù)字佃迄,正則為最大化匹配,所以四位數(shù)也會(huì)匹配贵少,五位數(shù)也會(huì)匹配前四位)

2. 重復(fù)

  • *: 0-n 次匹配前面的字符或表達(dá)式

  • +: 1-n 次匹配

  • ?: 0-1 次匹配

// 可能的匹配結(jié)果: s, se, see, seee...
$ grep 'se*' passwd
// 可能的匹配結(jié)果: se, see, seee...
$ grep 'se\+' passwd
// 可能的匹配結(jié)果: s, se, 只有兩種
$ grep 'se\?' passwd

后兩者注意要進(jìn)行轉(zhuǎn)義呵俏。

// 匹配字符串,要加括號(hào) se, sese, sese...
$ grep '\(se\)\+' passwd

注意括號(hào)也要進(jìn)行轉(zhuǎn)義滔灶。

  • 重復(fù)特定次數(shù) {n,m}

*: 相當(dāng)于 {0,}

+: 相當(dāng)于 {1,}

?: 相當(dāng)于 {0,1}

// 匹配兩到三位數(shù)字
$ grep '[0-9]\{2,3\}' passwd

注意大括號(hào)也要轉(zhuǎn)義普碎。

  • 任意字符串: .*
    (即任意單字符重復(fù)0-n次)

如: ^r.*, r.*t

$ grep '^r.*' passwd
root:*:0:0:System Administrator:/var/root:/bin/sh

注意:正則貪婪匹配的規(guī)則。

$ grep '\bd.*e\b' passwd

多么貪婪录平,我只想要匹配類(lèi)似 dislike 這種詞麻车。

這時(shí)候就不能重復(fù)任意字符了。

$ grep '\bd[a-z]*e\b' passwd

這樣改就好了斗这。

盡量去縮小要匹配的范圍动猬,才能避免踩這些坑。

3. 邏輯

  • 邏輯或 |
$ grep 'bin/\(false\|true\)' passwd

4. 正則案例

1. 匹配4-10位QQ號(hào)

$ grep '^[0-9]\{4,10\}$' file

2. 匹配15或18位身份證號(hào)表箭,包括X

分析:

  • 第一位不能為0
  • 最后一位的范圍要擴(kuò)大
  • 中間為13或16位重復(fù)數(shù)字
// 先寫(xiě)邏輯赁咙,最后加頭尾和轉(zhuǎn)義
$ grep '^[1-9]\([0-9]\{13\}\|[0-9]\{16\}\)[0-9xX]$' file

3. 匹配密碼

分析:

  • 密碼保護(hù)字母數(shù)字下劃線,使用元字符 \w
  • 可1次或多次重復(fù) +
$ grep '^\w\+$' file
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末免钻,一起剝皮案震驚了整個(gè)濱河市彼水,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌极舔,老刑警劉巖凤覆,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拆魏,居然都是意外死亡盯桦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)稽揭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俺附,“玉大人,你說(shuō)我怎么就攤上這事溪掀∈铝停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)璃哟。 經(jīng)常有香客問(wèn)我氛琢,道長(zhǎng),這世上最難降的妖魔是什么随闪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任阳似,我火速辦了婚禮,結(jié)果婚禮上铐伴,老公的妹妹穿的比我還像新娘撮奏。我一直安慰自己,他們只是感情好当宴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布畜吊。 她就那樣靜靜地躺著,像睡著了一般户矢。 火紅的嫁衣襯著肌膚如雪玲献。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天梯浪,我揣著相機(jī)與錄音捌年,去河邊找鬼。 笑死挂洛,一個(gè)胖子當(dāng)著我的面吹牛礼预,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抹锄,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼逆瑞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伙单?” 一聲冷哼從身側(cè)響起获高,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吻育,沒(méi)想到半個(gè)月后念秧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡布疼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年摊趾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片游两。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砾层,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贱案,到底是詐尸還是另有隱情肛炮,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站侨糟,受9級(jí)特大地震影響碍扔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秕重,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一不同、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溶耘,春花似錦二拐、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)菱魔。三九已至留荔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澜倦,已是汗流浹背聚蝶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藻治,地道東北人碌嘀。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓谍夭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骏令,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • 推薦幾個(gè)正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,500評(píng)論 9 151
  • 幾個(gè)正則表達(dá)式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
  • 正則表達(dá)式到底是什么東西?字符是計(jì)算機(jī)軟件處理文字時(shí)最基本的單位逢勾,可能是字母邑跪,數(shù)字,標(biāo)點(diǎn)符號(hào)钩乍,空格辞州,換行符,漢字等...
    獅子挽歌閱讀 2,150評(píng)論 0 9
  • 初衷:看了很多視頻寥粹、文章变过,最后卻通通忘記了,別人的知識(shí)依舊是別人的涝涤,自己卻什么都沒(méi)獲得媚狰。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,017評(píng)論 0 20
  • 每次聽(tīng)聞生死,都升起對(duì)生命無(wú)常的覺(jué)察阔拳。 方生方死崭孤,方死方生。 瞬間即是永恒,永恒不離瞬間裳瘪。 若是呼吸間都把握不住土浸,...
    千劫塵土一杯沙閱讀 216評(píng)論 0 0