shell正規表示式

2022-09-01 19:00:08 字數 3791 閱讀 3864

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

生活中處處都是正則:

比如我們描述:4條腿

你可能會想到的是四條腿的動物或者桌子,椅子等

繼續描述:4條腿,活的

就只剩下四條腿的動物這一類了

在linux中,萬用字元是由shell解釋的,而正規表示式則是由命令解釋的,下面我們就為大家介紹三種文字處理工具/命令:grep、sed、awk,它們三者均可以解釋正則。

引數

-n  :顯示行號

-o  :只顯示匹配的內容

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

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

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

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

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

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

-e  :等於egrep,擴充套件

-i  :忽略大小寫

-v  :取反,不匹配

-w:匹配單詞

[root@miwifi-r3-srv ~]# cat a.txt 

root123

root asdf

root_123

rootss

root 123

[root@miwifi-r3-srv ~]# grep -i "root" a.txt

root123

root asdf

root_123

rootss

root 123

[root@miwifi-r3-srv ~]# grep -w "root" a.txt

root 123

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]

shell正規表示式

句點 匹配單字元 1 匹配任意單ascii 字元,可以為字母,或為數字。2 舉例 xc.匹配dexc1t 23xcdf 等,w.w.w.匹配rwxrw rw 行首以 匹配字串或字串行 1 允許在一行的開始匹配字元或單詞。2 舉例 01 匹配0011cx4 c01sdf 等,d 匹配drwxr xr ...

shell正規表示式

句點 匹配單字元 1 匹配任意單ascii 字元,可以為字母,或為數字。2 舉例 xc.匹配dexc1t 23xcdf 等,w.w.w.匹配rwxrw rw 行首以 匹配字串或字串行 1 允許在一行的開始匹配字元或單詞。2 舉例 01 匹配0011cx4 c01sdf 等,d 匹配drwxr xr ...

shell 正規表示式

一 從頭開始 echo the book sed n the p 二 結尾 三 聯合定位 this is a test 四 點字元 用於匹配除換行符之外的任何乙個單一字元 五 字元類 定義一類字元,用於匹配文字模式中的某一位置 例如 echo n ch at p data the cat is sl...