常用命令 正規表示式

2021-10-08 21:57:17 字數 4846 閱讀 7322

正規表示式(regular expression,regexp),被很多程式和開發語言所廣泛支援:vim, less,grep,sed,awk, nginx,mysql 等

正規表示式引擎:

採用不同演算法,檢查處理正規表示式的軟體模組,如:pcre(perl compatible regular

expressions),預設正規表示式是貪婪模式匹配,盡可能長匹配

正規表示式的元字元分類:字元匹配、匹配次數、位置錨定、分組

.   	匹配任意單個字元

匹配指定範圍內的任意單個字元,示例:[wang]

[0-9]

[a-z]

[a-za-z]

[^] 匹配指定範圍外的任意單個字元,示例:[^wang]

[:alnum:] 字母和數字

[:alpha:] 代表任何英文大小寫字元,亦即 a-z, a-z

[:lower:] 小寫字母,示例:[

[:lower:]

],相當於[a-z]

[:upper:] 大寫字母

[:blank:] 空白字元(空格和製表符)

[:space:] 水平和垂直的空白字元(比[:blank:]包含的範圍廣)

[:cntrl:] 不可列印的控制字元(退格、刪除、警鈴...)

[:digit:] 十進位制數字

[:xdigit:] 十六進製制數字

[:graph:] 可列印的非空白字元

[:print:] 可列印字元

[:punct:] 標點符號

範例

#匹配/etc/中以rc開頭,後接0個或乙個數字的檔案或目錄檔案

[root@centos8 ~]

#ls /etc/ | grep "rc[.0-9]"

[root@centos8 ~]

#ls /etc/ | grep "rc[.0-9]"

rc0.d

rc1.d

rc2.d

rc3.d

rc4.d

rc5.d

rc6.d

rc.d

rc.local

#匹配/etc/中以rc開頭,後以.d結尾,中間是. 或數字的檔案或目錄檔案

[root@centos8 ~]

#ls /etc/ | grep "rc[.0-9].d"

rc0.d

rc1.d

rc2.d

rc3.d

rc4.d

rc5.d

rc6.d

用在要指定次數的字元後面,用於指定前面的字元要出現的次數。

* 匹配前面的字元任意次,包括0次,貪婪模式:盡可能長的匹配

.* 任意長度的任意字元

\? 匹配其前面的字元0或1次,即:可有可無

\+ 匹配其前面的字元至少1次,即:肯定有

\ 匹配前面的字元n次

\ 匹配前面的字元至少m次,至多n次

\ 匹配前面的字元至多n次

\ 匹配前面的字元至少n次

ps:擴充套件正規表示式中,不需要轉義符\ ,如\? 在擴充套件表示式中,是?

範例

位置錨定可以用於定位出現的位置

^ 			行首錨定,用於模式的最左側

$ 行尾錨定,用於模式的最右側

^pattern$ 用於模式匹配整行

^$ 空行

^[[:space:]

]*$ 空白行

\< 或 \b 詞首錨定,用於單詞模式的左側

\> 或 \b 詞尾錨定,用於單詞模式的右側

\ 匹配整個單詞

#ps:

#1.pattern是模式匹配

#2.單詞是由字母,數字,下劃線組成

範例

[root@centos8 ~]

#cat /etc/fstab

## /etc/fstab

# created by anaconda on sun aug 2 09:55:22 2020

## accessible filesystems, by reference, are maintained under '/dev/disk/'.

# see man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.

## after editing this file, run 'systemctl daemon-reload' to update systemd

# units generated from this file.

#uuid=821ca9f0-c339-4d0a-9258-806b87fe9e5d / xfs defaults 0 0

uuid=75cbd81a-7230-4f4a-a2d7-7119754f7f7e /boot ext4 defaults 1 2

uuid=ab7a6930-42ca-4dcb-8f8e-cffda571867c /data xfs defaults 0 0

uuid=fbfef6d8-5c65-489f-bc7e-cb5d2055c9aa swap swap defaults 0 0

#獲取/etc/fstab 中不以# 開頭的內容

[root@centos8 ~]

#grep '^[^#]' /etc/fstab

uuid=821ca9f0-c339-4d0a-9258-806b87fe9e5d / xfs defaults 0 0

uuid=75cbd81a-7230-4f4a-a2d7-7119754f7f7e /boot ext4 defaults 1 2

uuid=ab7a6930-42ca-4dcb-8f8e-cffda571867c /data xfs defaults 0 0

uuid=fbfef6d8-5c65-489f-bc7e-cb5d2055c9aa swap swap defaults 0 0

#檢視/etc/profile 共有多少行內容

[root@centos8 ~]

#wc -l /etc/profile

85 /etc/profile

#獲取/etc/profile中除空行以外有多少行

[root@centos8 ~]

#grep -v '^$' /etc/profile | wc -l

73#獲取/etc/profile中除#開頭,空行外有多少行

[root@centos8 ~]

#grep '^[^$#]' /etc/profile |wc -l

61

分組:() 將乙個或多個字元**在一起,當作乙個整體處理,如:\(root\)+

分組括號中的模式匹配到的內容會被正規表示式引擎記錄於內部的變數中,這些變數的命名方式為: \1, \2, \3, …

\1 表示從左側起第乙個左括號以及與之匹配右括號之間的模式所匹配到的字元

範例

執行前

#將l..e這種格式(如like,love)後追加r 

%s@\(l..e\)@\1r@g

執行後

#將l..e這種格式(如like,love)替換成1r

%s#\(l..e\)#1r#g

執行後

後向引用:引用前面的分組括號中的模式所匹配字元,而非模式本身

或的關係用 | 表示

a|b			a或b

c|cat c或cat

(c|c)at cat或cat

linux常用命令 正規表示式

正規表示式 alnum 代表所有英文本母和數字 alpha 代表所有英文本母 blank 表示空格和tab按鍵 cntrl 代表鍵盤上的控制按鍵 digit 代表所有的數字 graph 除了空格和tab外其他所有按鍵 lower 代表所有小寫字母 print 代表任何可以被列印出來的字元 punct...

linux 命令 正規表示式

1.cut擷取以 分割保留第七段 grep hadoop etc passwd cut d f7 2.排序 du sort n 3.查詢不包含hadoop的 grep v hadoop etc passwd 4.正則表達包含hadoop grep hadoop etc passwd 5.正則表達 點...

grep命令 正規表示式

linux系統中grep是一種強大的文字搜尋工具,按照關鍵字或正規表示式過濾文字,並把匹配的行列印出來。grep的全稱是global regular expression print,表示的是全域性正規表示式版本,使用許可權時所有使用者。e 在擴充套件正則模式下 p 在perl正則模式下 v 將不匹...