主要內容:1、正規表示式2、基礎3、擴充套件4、通配5、grep命令
正規表示式基礎(1)
元字元
(metacharacters)是用來闡釋字元表示式意義的字元,簡言之,元字元就是描述字元的字元,它用於對字元表示式的內容、轉換及各種操作資訊進行描述。
正規表示式是由一串字元和元字元構成的字串,簡稱re(regularexpression)。
正規表示式的主要功能是文字查詢和字串操作,正規表示式可以匹配文字的乙個字元或字元集合。
符號意義
* 0個或多個在*字元之前那個普通字元
. 匹配任意字元
^ 匹配行首,或後面字元的非
$ 匹配行尾
匹配字元集合
\ 轉義符,遮蔽乙個元字元的特殊意義
\<\> 精確匹配符號
\ 匹配前面字元出現n次
\ 匹配前面字元至少出現n次
\ 匹配前面字元出現n次與m次之間
示例:*符號用於匹配前面乙個普通字元的0次或多次重複
hel*o:*符號前面的普通字元是l,*字元就表示匹配l字元0次或多次,如字串helo、hello、hellllllo都可以由hel*o來表示
.符號用於匹配任意乙個字元
…73.表示前面三個字元為任意字元,第4和第5個字元是7和3,最後乙個字元為任意字元,如xcb738、4j973u都能匹配上述字串
^符號用於匹配行首,表示行首的字元是^字元後面的那個字元
^cloud表示匹配以cloud開頭的行
$符號匹配行尾,$符號放在匹配字元之後a、b、1、2等字元屬於普通字元,普通字元可以按照字面意思理解,如:a只能理解為英文的小寫字母a,沒有其他隱藏含義。
micky$表示匹配以micky結尾的所有行
^$
表示空白行
匹配字元集合,該符號支援窮舉方法列出字元集合的所有元素
[0123456789]、[0-9]……
[a-za-z] [a-za-z]*
匹配所有英文單詞
\符號是轉義符,用於遮蔽乙個元字元的特殊意義
\.
\$ \^
\<\>符號是精確匹配符號,該符號利用\符號遮蔽<>符號
\精確匹配單詞the,them, they等不匹配
\系列符號表示前乙個字元的重複
\:匹配前面字元出現n次 ,如 jo\b 匹配jooob
\:匹配前面字元至少出現n次,如jo\b匹配jooob、joooob、jooooob等字串
\:匹配前面字元出現n次與m次之間,如jo\b匹配jooob、joooooob等字串
[a-z] \: 匹配5個小寫英文本母,比如hello、house等
正規表示式擴充套件:(awk和perl支援)
符號 意義
? 匹配0個或1個在其之前的那個普通字元
+ 匹配1個或多個在其之前的那個普通字元
() 表示乙個字元集合或用在expr中
| 表示「或」意義,匹配一組可選的字元
通配:通配(globbing)是把乙個包含萬用字元的非具體檔名擴充套件到儲存在計算機、伺服器或者網路上的一批具體檔名的過程
最常用的萬用字元包括正規表示式元字元:?、*、、{}、^等,萬用字元與元字元意義不完全相同:
*
符號不再表示其前面字元的重複,而是表示任意位的任意字元
?
字元表示一位的任意字元
^符號在通配中不代表行首,而是代表取反意義
舉三個例子:
[root@zawu globus]# ls -l *.awk
[root@zawu globus]# ls -l 0?.pem
[root@zawu globus]# ls -l [a-h]*.[^awk]*
grep命令:
grep是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來,grep也是linux中最廣泛使用的命令之一
grep [選項][模式][檔案…]
選項如下頁表所示
模式:可以是字串,也可以是變數,還可以是正規表示式。
說明:無論模式是何種形式,只要模式中包含空格,就需要使用雙引號將模式括起來,
舉例:
[root@zawu globus]# grep certificate00.pem
[root@zawu globus]# grep user certificate 00.pem
[root@zawu globus]# grep "user certificate" 00.pem
檔案可以有多個,亦可以用通配來表示
選項
意義
-c
只輸出匹配行的數量
-i
搜尋時忽略大小寫 ignore
-h 查詢多檔案時不顯示檔名
-l只列出符合匹配的檔名,而不列出具體匹配行
line
不列匹配行
-n 列出所有匹配行,並顯示行號
行and number
-s 不顯示不存在或無匹配文字的錯誤資訊
-v顯示不包含匹配文字的所有行
相反的
-w 匹配整詞
word
-r 遞迴搜尋,不僅搜尋當前工作目錄,而且搜尋子目錄
recursion
-e 支援擴充套件的正規表示式
extent
-f 不支援正規表示式,按照字串的字面意思進行匹配
font
posix字元類:
類名
意義
[:upper:] 表示大寫字母[a-z]
[:lower:]
表示大寫字母[a-z]
[:digit:] 表示阿拉伯數字[0-9]
[:alnum:] 表示大小寫字母和阿拉伯數字[0-9a-za-z]
[:space:] 表示空格或tab鍵
[:alpha:] 表示大小寫字母[a-za-z]
[:cntrl:] 表示ctrl鍵
[:graph:]或[:print:] 表示ascii碼33-126之間的字元
[:xdigit:] 表示16進製制數字[0-9a-fa-f]
linux系統支援三種形式的grep命令(grep命令族):
grep:標準grep命令,支援基本正規表示式
egrep:擴充套件grep命令,支援基本和擴充套件正規表示式,等價於grep –e
fgrep:快速grep命令,不支援正規表示式,按照字串的字面意思進行匹配,等價於grep -f
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...
Linux正規表示式
正規表示式是一種符號表示法,用於識別文字模式。linux處理正規表示式的主要程式是grep。grep搜尋與正規表示式匹配的行,並將結果輸送至標準輸出。1.grep匹配模式 grep按下述方式接受選項和引數 其中,regex表示正規表示式 1 grep options regex files 其中op...
Linux 正規表示式
一 語系對正規表示式的影響 對 a z 的查詢結果影響很大 lang c 0 1 2 3 4 a b c d a b c d lang zh cn 0 1 2 3 4 a a b b c c 二 特殊符號與代表意義 alnum 英文大小寫字元與數字 a z 0 9 a z alpha 英文大小寫字元...