正規表示式

2022-08-20 11:30:14 字數 3127 閱讀 8690

一、什麼是正則

正則就是用一些具有特殊含義的符號組合到一起(稱為正規表示式)來描述字元或者字串的方法。

二、grep

引數:-n  :顯示行號

-o  :只顯示匹配的內容

-q  :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容

-l  :如果匹配成功,則只將檔名列印出來,失敗則不列印,通常-rl一起用,grep -rl 'root' /etc 

-a  :如果匹配成功,則將匹配行及其後n行一起列印出來

-b  :如果匹配成功,則將匹配行及其前n行一起列印出來

-c  :如果匹配成功,則將匹配行及其前後n行一起列印出來

--color

-c  :如果匹配成功,則將匹配到的行數列印出來

-e  :等於egrep,擴充套件

-i  :忽略大小寫

-v  :取反,不匹配

-w:匹配單詞

grep種類:

grep

fgrep

pgrep

egrep

三、正則介紹

^ 行首

$ 行尾

. 除了換行符以外的任意單個字元

* 前導字元的零個或多個

.* 所有字元

字元組內的任一字元

[^] 對字元組內的每個字元取反(不匹配字元組內的每個字元)

^[^] 非字元組內的字元開頭的行

[a-z] 小寫字母

[a-z] 大寫字母

[a-z] 小寫和大寫字母

[0-9] 數字

\< 單詞頭 單詞一般以空格或特殊字元做分隔,連續的字串被當做單詞

\> 單詞尾

擴充套件正則 sed 加 -r 引數 或轉義

grep 加 -e 或 egrep 或轉義

awk 直接支援 但不包含

可以使用--posix支援

[root@miwifi-r3-srv ~]#  awk '/ro/' /etc/passwd

[root@miwifi-r3-srv ~]#  awk --posix '/ro/' /etc/passwd

sed -n '/roo\?/p' /etc/passwd 

sed -rn '/roo?/p' /etc/passwd

? 前導字元零個或乙個

+ 前導字元乙個或多個

abc|def abc或def

a(bc|de)f abcf 或 adef

x\ x出現m次

x\ x出現m次至多次(至少m次)

x\ x出現m次至n次

posix定義的字元分類:

[:alnum:] alphanumeric characters.

匹配範圍為 [a-za-z0-9]

[:alpha:] alphabetic characters.

匹配範圍為 [a-za-z]

[:blank:] space or tab characters.

匹配範圍為 空格和tab鍵

[:cntrl:] control characters.

匹配控制鍵 例如 ^m 要按 ctrl+v 再按回車 才能輸出

[:digit:] numeric characters.

匹配所有數字 [0-9]

[:graph:] characters that are both printable and visible. (a space is print-

able, but not visible, while an a is both.)

匹配所有可見字元 但不包含空格和tab 就是你在文字文件中按鍵盤上能用眼睛觀察到的所有符號

[:lower:] lower-case alphabetic characters.

小寫 [a-z]

[:print:] printable characters (characters that are not control characters.)

匹配所有可見字元 包括空格和tab

能列印到紙上的所有符號

[:punct:] punctuation characters (characters that are not letter, digits, con-

trol characters, or space characters).

特殊輸入符號 +-=)(*&^%$#@!~`|\"'{}:;?/>.<,

注意它不包含空格和tab

這個集合不等於^[a-za-z0-9]

[:space:] space characters (such as space, tab, and formfeed, to name a few).

[:upper:] upper-case alphabetic characters.

大寫 [a-z]

[:xdigit:] characters that are hexadecimal digits.

16進製制數 [0-f]

使用方法:

[root@seker ~]# grep --color '[[:alnum:]]' /etc/passwd

四、sed

sed流編輯器 stream editer,是以行為單位的處理程式

sed 流編輯器 stream editer

語法sed [options] 'command' in_file[s]

options 部分

-n-e

-i-f

command 部分

'[位址1,位址2] [函式] [引數(標記)]'

定址的方法 1.數字 2.正則

數字十進位制數

1 單行 

1,3 範圍 從第一行到第三行

2,+4 匹配行後若干行

4,~3 從第四行到下乙個3的倍數行

2~3 第二行起每間隔三行的行

$ 尾行

1! 除了第一行以外的行

正則正則必須用//包裹起來

擴充套件正則需要用 -r 引數或轉義

數字定址:sed -n '1p' /etc/passwd

正則定址:sed -n '/^root/p' /etc/passwd

正規表示式 正規表示式 總結

非負整數 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正規表示式 編寫正規表示式

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