1. 程式人生 > 實用技巧 >shell正則表示式

shell正則表示式

什麼是正則表示式?

正則表示式在每種語言中都會有,功能就是匹配符合你預期要求的字串。

為什麼要學正則表示式?

在企業工作中,我們每天做的linux運維工作中,時刻都會面對大量帶有字串的文字配置、程式、命令輸出及日誌檔案等,而我們經常會有迫切的需要,從大量的字串內容中查詢符合工作需要的特定的字串。這就要靠正則表示式。因此,可以說正則表示式就是為過濾字元的需求而生的!
例如:ifconfig的輸出取IP,例如:cat /var/log/messages輸出等

兩個注意事項:

正則表示式應用非常廣泛,存在於各種語言中,例如:php、python、java等。但是我們今天講的linux系統運維工作中的正則表示式,即linux正則表示式,最常用正則表示式的命令就是grep(egrep)、sed、awk,換句話說linux四劍客劍客要想工作的各高效,那一定離不開正則表示式配合的。

正則表示式和我們常用的萬用字元特殊字元是用本質去別的,這一點要注意。萬用字元例子:ls .log**這裡的就是萬用字元(表示所有),不是正則表示式

Shell 正則表示式分為兩種:

  • 基礎正則表示式:BRE(basic regular express)
  • 擴充套件正則表示式:ERE(extend regular express),擴充套件的表示式有+、?、|和()

下面是一些常用的正則表示式符號

正則表示式	描述
\	轉義符,將特殊字元進行轉義,忽略其特殊意義
^	匹配行首,awk中,^則是匹配字串的開始
$	匹配行尾,awk中,$則是匹配字串的結尾
.	匹配除換行符\n之外的任意單個字元,awk則中可以
[]	匹配包含在[字元]之中的任意一個字元
[^ ]	匹配[^字元]之外的任意一個字元
[1]	匹配不是中括號內任意一個字元開頭的行
[ - ]	匹配[]中指定範圍內的任意一個字元,要寫成遞增
?	匹配之前的項1次或者0次
+	匹配之前的項1次或者多次
*	匹配之前的項0次或者多次
()	匹配表示式,建立一個用於匹配的子串
{ n }	匹配之前的項n次,n是可以為0的正整數
{n,}	之前的項至少需要匹配n次
{n,m}	指定之前的項至少匹配n次,最多匹配m次,n<=m
|	交替匹配|兩邊的任意一項
<	邊界符,匹配字串開始
>	邊界符,匹配字串結束

在Shell下使用這些正則表示式處理文字最多的命令有下面幾個工具:

命令	描述
grep	預設不支援擴充套件表示式,加-E選項開啟ERE。如果不加-E使用花括號要加轉義符{}
egrep	支援基礎和擴充套件表示式
awk	支援egrep所有的正則表示式
sed	預設不支援擴充套件表示式,加-r選項開啟ERE。如果不加-r使用花括號要加轉義符{}

參考:https://www.cnblogs.com/passzhang/p/11664218.html