語系對正規表示式的影響
lang=c時:0 1 2 3 4 … a b c d … z … a b c d … z
lang=zh_cn時:0 1 2 3 4 … a a b b c c d d …z z
所以使用正規表示式的時候,要特別注意,當時的環境,否則可能會發現與別人的選取結果不一樣。
為了避免編碼造成的英文與數字選取問題,因此有些特殊符號我們需要了解。
引數含義[:alnum:]代表英文大小寫字元及數字,即0-9,a-z,a-z
[:alpha:]代表任何英文大小寫字元,即a-z,a-z
[:blank:]
代表空格鍵與tab鍵
[:cntrl:]
代表鍵盤上面的控制鍵,即包括cr,lf,tab,del等
[:digit:]代表數字,即0-9
[:graph:]
除了空格符外其他所有按鍵
[:lower:]代表小寫字元,即a-z
[:print:]
代表任何可以被列印出來的字元
[:punct:]
代表標點符號,即" 』 ? ! ; : # $
[:upper:]代表大寫字元,即a-z
[:space:]
代表會產生空白的字元,包括空白鍵tab和cr
[:xdigit:]
代表十六進製制的數字型別,因此包括0-9,a-f,a-f的數字與字元
grep的高階引數
引數含義-a
後面接數字,是after的意思,除了列出搜尋出的這一行,後面n行也要列出
-b後面加數字,是before的意思,除了列出該行外,前面n行也要列出
–color=auto
可將正確的那個選取資料列出顏色
[root@www~]# dmesg | grep 'eth'
eth0:realtek rtl8139 at 0xee846000, 00:90:cc:a6:34:84,irq 10
eth0:identified 8139 chip type 'rtl-8139c'
eth0:link up,100mbps,full-duplex.lpa,0xc5e1
eth0:no ipv6 routers present
<==dmesg可以列出核心產生的資訊,通過grep來選取網絡卡相關的資訊。
grep在資料中查詢乙個字串時,是以整行為單位進行資料選取的。如果想讓grep預設使用顏色高亮關鍵字,那麼可以在~/.bashrc內加上alias grep=『grep --color=auto』
利用中括號老查詢集合字元
如果想要查詢test和taste可以發現他們有共同的t?st存在
[root@www~]# grep -n 't[ae]st' regular_express.txt
8:i can't finish the test
9:oh!the soup taste good
在中括號中,無論有幾個字母,都代表1個,並且字母與字母之間是或的關係。
如果我們需要有oo的字元,但是oo前面沒有g
[root@www~]# grep -n '[^g]oo' regular_express.txt
3:football game is not use feet only
當我們不需要oo前面有小寫字元的[root@www~]# grep -n '[^a-z]oo' regular_epress.txt
5:however,this dress is about $ 3183 dollars.
15:you are the best is mean you are the no.1.
行首與行尾字元^$
任意乙個字元.與重複字元*
[root@www~]# grep -n 'g..d' regular_rxpress.txt <==代表搜尋g與d之間有兩個字元的行
1:"open spurce" is a good mechanism to develop programs.
19:oh!the soup taste good.
[root@www~]# grep -n 'ooo*' regular_express.txt <==代表搜尋有兩個o的字元的行。*代表*前面的字元含有0個或者0個以上
1:"open source" is a good mechanism to develop programs.
19:goooooogle yes!
限定連續re字元範圍
grep -n 'o\' regular_express.txt <==代表篩選出包含兩個及以上連續o的字元的行
grep -n 'go\' regular_express.txt <==代表篩選出包含2個到5個連續o的字元的行,並且第乙個o前面是g
grep -n 'go\' regular_express.txt <==代表篩選出兩個以上的連續o的字元的行,並且第乙個o前面是g
#在{}裡面如果有逗號,代表以上,沒有逗號代表x及以上
sed工具
範例:sed [-nefr] 動作
注意:動作需要
引數含義-n
使用安靜模式,一般情況下,所有來自stdin的資料一般都會被列出到螢幕上,但如果加上-n引數,則只有經過sed特殊處理那一行才會被列出
-e直接在命令列模式下進行sed的動作編輯
-f直接將sed動作寫在乙個檔案內,-f filename 可以執行filename內的sed動作
-rsed動作支援的是擴充套件型正規表示式的語法,-f filename則可以執行filename內的sed動作
-i直接修改讀取的檔案內容,而不是由螢幕輸出
動作說明:[n1[,n2]] function
n1,n2是可選的引數,代表進行動作的行數,舉例,如果動作需要在10到20行進行,則"10,20 [動作行為]"
function引數含義a
新增,a的後面接字串,而這些字串會在新的一行出現
c替換,c的後面接字串,這些字串可以替換n1,n2之間的行
d刪除,因為是刪除,所以d後面通常不接引數
i插入,i的後面可以接字串,而這些字串會在新的一行出現(目前的上一行)
p列印,也就是將某個選擇的資料列印出來,通常p引數與引數sed -n 一起執行
s替換,可以直接進行替換工作,通常這個s的動作可以搭配正規表示式,如1,20s/old/new/g
基礎正規表示式
re字元
含義word
查詢的word在行首,例子grep -n 『^#』 regular_express.txt 代表以#開頭
ord$
查詢的字串在行尾,例子grep -n 『!$』 regular_express.txt 代表以!結尾
.代表一定有乙個任意字元,例子grep -n 『e.e』 regular_express.txt 代表e與e之間有乙個字元
\轉義字元,把特殊符號的特殊意義去掉
*重複零到無窮多個的前乙個字元,例子grep -n 『ee*』 regular_express.txt 代表至少有1個e
[list]
從字元集合中選出想要選取的字元,例子grep -n 『g[ld]』 regular_express.txt 代表有gl或者gd的行
[n1-n2]
從字元集合的re字元中找出想要選取的字元範圍,例子grep -n 『[0-9]』 regular_express.txt代表含任意數字的行
[^list]
從字元集合的re字元裡面找到不要的字串或者範圍,例子grep -n 『oo[^t]』 regular_express.txt 代表不要含有oot的行
擴充套件正規表示式
grep僅支援基礎正規表示式,如果要使用擴充套件正規表示式,需要用grep -e 或者egrep
re字元含義+
重複乙個或乙個以上的前乙個re字元,例子egrep -n 『go+d』 regular_express.txt 代表god good goood等等
?零個或乙個re字元,例子egrep -n 'go?d』代表gd 或者god
|用或的方式找出數個字串,例子egrep -n 『gd|good』 regular_express,txt 代表找出有gd或者good的行
()找出"組"字串,例子egrep -n -n 『g(la|oo)d』 regular_express.txt 查詢含有gla或者good的行
()+多個重複組的判定,例子egrep 『a(xyz)+c』 查詢以a開頭,以c結尾,中間含有乙個以上xyz的字串的行
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...