2022-07-24 正則表達(dá)式淺嘗

說(shuō)好的日更科吭,第二天就把復(fù)活卡用了啄骇。這樣也好丹诀,省的惦記逆巍。本節(jié)所學(xué)正則表達(dá)式來(lái)自https://www.lanqiao.cn/courses/90

1. 正則表達(dá)式介紹

  • 正則表達(dá)式(Regular Expression)是一個(gè)定義搜索模式的字符序列尺棋。Vi 中經(jīng)常會(huì)使用到正則表達(dá)式封锉,為了充分發(fā)揮 shell 編程的威力,Linux 使用者需要精通正則表達(dá)式膘螟。
[:alnum:]代表英文大小寫(xiě)字母及數(shù)字
[:alpha:]代表英文大小寫(xiě)字母
[:blank:]代表空格和 tab 鍵
[:cntrl:]鍵盤(pán)上的控制按鍵成福,如 CR,LF,TAB,DEL
[:digit:]代表數(shù)字
[:graph:]代表空白字符以外的其他
[:lower:]小寫(xiě)字母
[:print:]可以被打印出來(lái)的任何字符
[:punct:]代表標(biāo)點(diǎn)符號(hào)
[:upper:]代表大寫(xiě)字母
[:space:]任何會(huì)產(chǎn)生空白的字符如空格,tab,CR 等
[:xdigit:]代表 16 進(jìn)位的數(shù)字類型

2.grep 命令

  • 查找特定字符串
-a :以 text 檔案的方式搜尋 binary 檔案數(shù)據(jù)
-c :計(jì)算找到 '搜尋字符串' 的次數(shù)
-i :忽略大小寫(xiě)的不同荆残,所以大小寫(xiě)視為相同
-n :順便輸出行號(hào)
-v :反向選擇奴艾,亦即顯示沒(méi)有 '搜尋字符串' 內(nèi)容的行
grep -n 'the' regular_express.txt
grep -in 'the' regular_express.txt
grep -vn 'the' regular_express.txt

[ ] 可以用來(lái)查找字符組。
grep -n 't[ae]st' regular_express.txt

[^] 為反向選擇字符組内斯,用于排除后面的字符蕴潦,使用方式為 [^...]
grep -n '[^a-z]oo' regular_express.txt#不包含小寫(xiě)字母
grep -n '[^[:lower:]]oo' regular_express.txt

注意行首符 ^ 和反向選擇 [^] 的區(qū)別,^[A-Z] 表示以大寫(xiě)字母開(kāi)頭俘闯。[^A-Z] 表示除了大寫(xiě)字母 A-Z 的所有字符潭苞。
 grep -n 'd$' regular_express.txt # 查找以d結(jié)尾的
grep -n '^$' regular_express.txt #查找空行

^$: 過(guò)濾掉空白行
^#: 過(guò)濾掉注釋行(以 # 號(hào)開(kāi)頭)

任意字符. 重復(fù)字符*
*(星號(hào)):代表重復(fù)前面 0 個(gè)或者多個(gè)字符。
e*: 表示具有空字符或者一個(gè)以上 e 字符真朗。
ee*此疹,表示前面的第一個(gè) e 字符必須存在。第二個(gè) e 則可以是 0 個(gè)或者多個(gè) e 字符遮婶。
eee*蝗碎,表示前面兩個(gè) e 字符必須存在。第三個(gè) e 則可以是 0 個(gè)或者多個(gè) e 字符旗扑。
ee*e :表示前面的第一個(gè)與第三個(gè) e 字符必須存在蹦骑。第二個(gè) e 則可以是 0 個(gè)或者多個(gè) e 字符。

[](https://www.lanqiao.cn/questions/topics/28/)

限定連續(xù)字符范圍 { }
[](https://www.lanqiao.cn/questions/topics/28/)

限定連續(xù)字符范圍 { }
grep -n 'o\{2\}' regular_express.txt #查找連續(xù)的兩個(gè)o字符

grep -n 'go\{2,5\}g' regular_express.txt # 查找 g 后面接 2 到 5 個(gè) o臀防,然后再接 g 的字符串

^word    表示待搜尋的字符串(word)在行首
word$    表示待搜尋的字符串(word)在行尾
.(小數(shù)點(diǎn)) 表示 1 個(gè)任意字符
\        表示轉(zhuǎn)義字符脊串,在特殊字符前加 \ 會(huì)將特殊字符意義去除
*        表示重復(fù) 0 到無(wú)窮多個(gè)前一個(gè) RE(正則表達(dá)式)字符
[list]   表示搜索含有 l,i,s,t 任意字符的字符串
[n1-n2]  表示搜索指定的字符串范圍,例如 [0-9] [a-z] [A-Z] 等
[^list]  表示反向字符串的范圍,例如 [^0-9] 表示非數(shù)字字符辫呻,[^A-Z] 表示非大寫(xiě)字符范圍
\{n,m\}  表示找出 n 到 m 個(gè)前一個(gè) RE 字符
\{n,\}   表示 n 個(gè)以上的前一個(gè) RE 字符

3. sed命令

sed 是非交互式的編輯器。它不會(huì)修改文件琼锋,除非使用 shell 重定向來(lái)保存結(jié)果放闺。默認(rèn)情況下,所有的輸出行都會(huì)被打印到屏幕上缕坎。

sed 編輯器逐行處理文件(或輸入)怖侦,并將結(jié)果打印到屏幕上。

具體過(guò)程如下:首先 sed 把當(dāng)前正在處理的行保存在一個(gè)臨時(shí)緩存區(qū)中(也稱為模式空間)谜叹,然后處理臨時(shí)緩沖區(qū)中的行匾寝,完成后把該行發(fā)送到屏幕上。

sed 每處理完一行就將其從臨時(shí)緩沖區(qū)刪除荷腊,然后將下一行讀入艳悔,進(jìn)行處理和顯示。處理完輸入文件的最后一行后女仰,sed 便結(jié)束運(yùn)行猜年。sed 把每一行都存在臨時(shí)緩沖區(qū)中,對(duì)這個(gè)副本進(jìn)行編輯疾忍,所以直接使用不會(huì)修改原文件內(nèi)容乔外。
如果要修改原文件,需要添加 -i 選項(xiàng)一罩。

使用a和i新增輸出

nl regular_express.txt | sed '2,5c No 2-5 number' #將 2-5 行的內(nèi)容替換為 No 2-5 number杨幼,c 為替換內(nèi)容選項(xiàng)

輸出 regular_express.txt 的第 5-7 行,其中 -n 為安靜模式選項(xiàng)聂渊,我們?cè)谇懊娴恼鹿?jié)中已經(jīng)介紹過(guò)差购。

4.正則表達(dá)式擴(kuò)展應(yīng)用

利用支持?jǐn)U展正則表達(dá)式的 egrep 與特殊字符 | 的組合功能來(lái)間隔兩組字符串,如此一來(lái)汉嗽,可以極大地化簡(jiǎn)指令歹撒。

在非擴(kuò)展正則表達(dá)式中,我們使用 * 來(lái)表示任意個(gè)重復(fù)字符(零至無(wú)窮多個(gè))
grep -n 'goo*d' regular_express.txt
+ 表示重復(fù)一個(gè)或一個(gè)以上的前一個(gè)字符grep -n 'goo*d' regular_express.txt
? 表示重復(fù)零個(gè)或一個(gè)的前一個(gè)字符
egrep -n 'go?d' regular_express.txt

| 表示用或(or)的方式找出數(shù)個(gè)字符串
egrep -n 'gd|good' regular_express.txt
() 表示找出組字符串
egrep -n 'g(la|oo)d' regular_express.txt

()+ 多個(gè)重復(fù)群組判別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诊胞,一起剝皮案震驚了整個(gè)濱河市暖夭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撵孤,老刑警劉巖迈着,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異邪码,居然都是意外死亡裕菠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)闭专,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奴潘,“玉大人旧烧,你說(shuō)我怎么就攤上這事』瑁” “怎么了掘剪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奈虾。 經(jīng)常有香客問(wèn)我夺谁,道長(zhǎng),這世上最難降的妖魔是什么肉微? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任匾鸥,我火速辦了婚禮,結(jié)果婚禮上碉纳,老公的妹妹穿的比我還像新娘勿负。我一直安慰自己,他們只是感情好劳曹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布奴愉。 她就那樣靜靜地躺著,像睡著了一般厚者。 火紅的嫁衣襯著肌膚如雪躁劣。 梳的紋絲不亂的頭發(fā)上迫吐,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天库菲,我揣著相機(jī)與錄音,去河邊找鬼志膀。 笑死熙宇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溉浙。 我是一名探鬼主播烫止,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼戳稽!你這毒婦竟也來(lái)了馆蠕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惊奇,失蹤者是張志新(化名)和其女友劉穎互躬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體颂郎,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吼渡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乓序。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寺酪。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坎背,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寄雀,到底是詐尸還是另有隱情得滤,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布咙俩,位于F島的核電站耿戚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阿趁。R本人自食惡果不足惜膜蛔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脖阵。 院中可真熱鬧皂股,春花似錦、人聲如沸命黔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悍募。三九已至蘑辑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坠宴,已是汗流浹背洋魂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喜鼓,地道東北人副砍。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像庄岖,于是被迫代替她去往敵國(guó)和親豁翎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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