正規表示式

2021-09-06 23:13:49 字數 4435 閱讀 5960

語系對正規表示式的影響

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正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...