快速瞭解shell程式語言,及shell指令碼編寫使用(4)

2020-08-10 02:21:03

shell指令碼程式設計(4)——正則表達式

這一章主要寫的是shell指令碼中的正則表達式,能夠快速瞭解shell指令碼中的一些常用的技能,能夠快速掌握shell中的一些快捷功能(* ^ - ^ *)

目錄

shell指令碼程式設計(4)——正則表達式

文章目錄

一、 正則表達式

1、正則表達式概述(Regular Express)

2、正則表達式的特點

3、正則表達式基本元字元

4、擴充套件正則與基本正則比較


一、 正則表達式

1、正則表達式概述(Regular Express)

  • 正則表達式是對字串操作的一種邏輯公式
  • 使用符號配合某種工具,可以對文件過濾、篩選
  • 通常被用來檢索、替換那些符合某個模式(規則)的文字

2、正則表達式的特點

  • 靈活性、邏輯性和功能性非常強;
  • 可以迅速地用極簡單的方式達到字串的複雜控制。

3、正則表達式基本元字元

  • 行首尾及單字匹配
型別 含義 範例 說明
^ 匹配行首 ^abc 以abc開頭的行
^# 以#號開頭的行(比如註釋行)
$ 匹配行尾 abc$ 以abc結尾的行
^$ 空行
. 單個字元 . 除換行符(\n)以外的任意單個字
grep  「^root」 /etc/passwd          找以root開頭的行
grep  「bash$」 /etc/passd           找以bash結尾的行
grep 「r…」  /etc/passwd             含r開頭的四字元的行
grep "ro.." /etc/passwd            含ro開頭的四個字元的行
grep "roo." /etc/passwd            含roo開頭的四個字元的行
  • 限定次數
型別 含義 範例 說明
{n} 匹配n次 (ab){3} 匹配ababab
{n,m} 匹配n-m次 (ab){1,3} 匹配ab、abab、ababab
{n,} 匹配至少n次 (ab){2,} 匹配2個及以上連續的ab
grep "rao\{2\}t" user                找root,o只能出現2次
grep "rao\{1,2\}t" /etc/passwd       找raot 或者 raoot, o是1個或0是2個
grep "rao\{2,\}t" /etc/passwd        找raoot、raooot、raoo…t,含oo兩個以上
grep "0:\{2\}" /etc/passwd           找0::
grep "\(0:\)\{2\}" /etc/passdw       找0:0:
egrep "(0:){2}" /etc/passwd          使用擴充套件正則,效果同上
grep -E "(0:){2}" e/tc/passwd        使用擴充套件正則,效果同上
egrep "ro{1}t" /etc/passwd           找rot 
egrep "ro{2}t" /etc/passwd           找root
  • 範圍內單字匹配

     (匹配指定字元集合內的任何一個字元,[ ] 內加^可取反)

grep  "[rot]"  /etc/passwd      找含root字母的行
grep  "[a-z]"  /etc/passwd      找含有小寫字母的行
grep  "[A-Z]"  /etc/passwd      找含有大寫字母的行
grep  "[0-9]"  /etc/passwd      找含有數位的行
grep  "[^0-9]" /etc/passwd      找不數位的行
  • 整體及邊界匹配

     \ 爲跳脫符號,可以爲一些普通字元賦予特殊含義、或者將一些特殊字元變爲普通字元

grep "\(0:\)\{2\}" /etc/passdw  找0:0:
egrep "(0:){2}" /etc/passwd       使用擴充套件正則,效果同上
grep -E "(0:){2}" /etc/passwd     使用擴充套件正則,效果同上
egrep "a|b" /etc/passwd           找含a或者b
egrep "the\b" /etc/passwd         找the,e後面只能爲空
egrep "\<ro" /etc/passwd          找含ro開頭
egrep "\<the\>" /etc/passwd       找the,前後爲空
egrep "\woot" /etc/passwd         找*oot ,w代表任意
egrep "\sthe" /etc/passwd         找the ,the前面要空格
  • 未定匹配次數
egrep "(the)+" /etc/passwd      找一個the或者多個
egrep "(the)?" /etc/passwd      找0個the或者1個
egrep "(the)*" /etc/passw       找0個the或者連續多個
egrep "(the).*" /etc/passwd     任意長度的任意字串

4、擴充套件正則與基本正則比較

  • 擴充套件正則表達式的元字元、字元匹配、匹配次數、位置錨定、分組與基本正則表達式基本相同;
  • 用法相似,除了詞首、詞尾錨定一樣,其他只是在基本正則表達式中去掉跳脫字元
  • 與基本正則表達式的比較:寫法上比較簡單,去掉了大量的跳脫字元;但需要匹配特殊字元時,擴充套件正則表達式需將特殊字元用 [ ] 括起來使用,這時用基本正則表達式比較方便

結束啦
這篇的基本介紹就先寫到這裏,後面會繼續更新shell指令碼的一些常用的用法以及後面企業中一些實用的shell指令碼的運用,感謝你們的瀏覽,也希望對你們有所幫助,你的點贊是我努力的動力,謝謝你們!

上一篇《shell指令碼程式設計(3)》