歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

【Linux學習筆記九】Shell編程

【注】文章中的所有截圖均為centos下實驗結果,親測命令正確= ̄ω ̄=

【參考資料】《Linux從入門到精通(第2版)》劉憶智
等編著

1、定義 :模式,對正在查找的文本的描述
POSIX庫和PCRE均可以用於正則表達式編程。前者是Linux自帶庫,後者為Perl的庫,功能更強大一些,也更難掌握。
2、字符集和單詞
首先安裝一下words:sudo yum install words 存在於 /usr/share/dict/words

“.”用於匹配換行符以外的任意一個字符。
.at ##匹配諸如cat、sat、bat、#at、~at的字符串

[a-z]at ##限定at之前只能是小寫字符

“[ ]”用於指定一個字符集,但只匹配其中的一個字符。

[abc] ##只能匹配a或b或c中的一個字符

“-”用於描述一個范圍。

[a-zA-Z] ##能夠匹配所有的英文字符

[0-9] ##匹配所有的一位數字

$ egrep '[a-z]at' /usr/share/dict/words
##查找具有“一個字符+at”形式的單詞







$ egrep '\<[a-z]at\>' /usr/share/dict/words
##為了讓其可以嚴格匹配一個單詞,需要加上“\<”和“\>”







但是仍會出現有多余字符的字符串被匹配(如上圖),這是由於正則表達式中“單詞”指的是兩側由非單詞字符分割的字符串。

【轉載請注明文章出處:/content/9257539.html】

3、字符類
$ egrep "^[[:upper:]]t$" words
##找出所有以大寫字母開頭(^)和以t結尾($)的行







[[:upper:]]就是一個字符類,表示所有的大寫字母,等價於[A-Z]。下邊列出完整的字符串類

匹配字符 [[:alnum:]]
文字、數字字符 [[:alpha:]]
字母字符 [[:lower:]]
小寫字母 [[:upper:]]
大寫字母 [[:digit:]]
小數 [[:xdigit:]]
十六進制數字 [[:punct:]]
標點符號 [[:blank:]]
制表符和空格 [[:space:]]
空格 [[:cntrl:]]
所有控制符 [[:print:]]
所有可打印的字符 [[:graph:]]
除空格外所有可打印的字符4、位置匹配
字符“^”和“$”分別用於匹配行首和行尾。“^$”可以匹配空行,“$^”不會報錯,但不會輸出任何東西。
^a[a-z]t$ ##a開頭,t結尾,中間含有一個小寫字母的行。
^[0-9] ##以數字開頭的行






5、字符轉義
元字符“.”、“[”等不能直接匹配,需要用“\”取消元字符的特殊含義。
www\.google\.cn
##匹配 www.google.cn

【轉載請注明文章出處:/content/9257539.html】

6、重復
“*”表示前邊的模式重復0次或多次。
“+”表示前邊的模式重復1次或多次。

“?”表示前邊的模式重復0次或1次。

“{ }”指定前邊模式的重復次數。

^a.*t$ ##a開頭t結尾的行
\<hi\>.+\<Jerry\>
##單詞hi後邊隔了一個或幾個字符後出現單詞Jerry的行

\<[1-9][0-9]{7,}\>
##以數字1-9中的一個開始,第二位開始是0-9中的一個,從第二位開始重復至少7次(即代表超過七位的數的字符串)

元字符
描述
*
重復0次或多次
+
重復一次或多次
?
重復0次或一次
{n}
重復n次
{n,}
重復n次或更多次
{n,m}
重復不少於n次,不多於m次
7、子表達式
有時需要將多個字符構成的模式用括號括起來。
$ egrep "(or){2,}" words
##or重復2次或多次的行

$ egrep "or{2,}" words ##o後邊跟著2個r或更多r的行













8、反義
“[^y]”表示除了這個字符(這裡是y),注意區分表示行首的情況。
[^y] ##除了字母y
[^aeiou] ##除了字母a、e、i、o、u的所有字符

^[^y]
##不以字母y開頭的行

【轉載請注明文章出處:/content/9257539.html】

9、分支
前邊介紹過的正則表達式,簡單地執行“與”的組合,如:
^ht$ ##表示以h開頭,並且以t結尾的行
若想表達“或”的意思,需要“|”。

^h|t$ ##表示以h開頭,或者以t結尾的行

10、逆向引用
可以用“\”加上子表達式編號表示再次使用該子表達式匹配到的模式。子表達式編號根據出現的順序從左至右。
(\<.*\>).?( )*\1
##分解介紹如下

① (\<.*\>) 表示任意長度的單詞,編號為1的子表達式。

② .? 0個或1個標點(因為前邊匹配任意長度的單詞,此處只能匹配到標點)。

③ ( )* 0個或多個空格,編號為2的子表達式。

④ \1 第一個子表達式匹配到的模式再次出現。




【轉載請注明文章出處:/content/9257539.html】



Copyright © Linux教程網 All Rights Reserved