正則表達式

1.正則表達式介紹

  • 正則表達式是用來過濾文本的模式模板
  • 利用通配符來描述數據流中的一個或者多個字符,因而能夠利用不一樣的特殊字符來定義特定的數據過濾模式
  • 在Linux中有兩種正則表達式引擎:POSIX基礎正則表達式(BRE)引擎,POSIX拓展正則表達式(ERE)引擎

2.POSIX基礎正則表達式(BRE)引擎,適用於sed和gawk

1.純文本適配
$echo "This is a test " | sed -n '/test/p'
This is a test

#純文本適配對大小寫敏感
$echo "This is a test " | sed -n '/this/p'
$
$echo "This is a test " | sed -n '/This/p'
This is a test

#不須要單詞所有拼完,只要有就能夠匹配

#在正則表達式中可使用空格和數字,並且空格和其餘字符串並無什麼區別
$echo "This is number 1" | sed -n '/ber1/p'
$
$echo "This is number 1" | sed -n '/ber 1/p'
This is number 1

#單詞間有兩個空格的行匹配正則表達式模式,是找出多餘空格的好方法
2.特殊字符 .*[]^${}+?|()
  • 使用特殊字符須要用 \ 來進行轉義,就像$(變量)要表達美圓符號的意思須要 $
3.錨字符 ^ $
#  ^ 表明了行首
$echo "this is a test" | sed -n '/^this/p'
$this is a test    #只要單詞是在行首,就能匹配到

# $表明了行尾
$echo "this is a test" | sed -n '/test$/p'
$this is a test    #只要單詞是在行尾,就能匹配到

# ^$ 表示空白行,利用sed的/^$/d,能夠刪除文件中的空白行
4.點字符
#點字符能夠匹配除換行符以外的任何 單個 字符。
$ echo "this is a nice cat" |  sed -n '/.at/p'
$this is a nice cat

$ echo "this is a nice cat" |  sed -n '/.th/p'
$                                    #由於th前沒東西,因此沒法匹配
5.字符組
  • 能夠利用方括號定義一組字符(英文或者數字),只要出現組中的字符,就能夠獲得匹配
$echo "The cat is sleeping" | sed -n '/[ch]at/p'
$ The cat is sleeping
$echo "The hat is nice" | sed -n '/[ch]at/p'
$The hat is nice
#
#單個表達式中可使用多個字符組
$echo "yes" | sed -n '/[Yy]e[Ss]/p'
$yes
  • 只要在組裏字符前加上^,就能夠變成排除這些字符的意思
$echo  "it is three o'clock" | sed -n '/[^at]hree/p'
$            #由於three已經被排除了
6.區間
  • [0-9],就是0到9的所有字符
  • [c-h],就是c到h的所有字符
  • [a-ch-m],就是a到c和h到m的所有字符,這是個不連續區間
7.特殊的字符組
  • 見原書p434,感受用處不是很大
8.星號
  • 字符串後面加星號意味着 該字符 必須出現0次或屢次,和Linux命令行裏的意思不太同樣
$echo "ik" | sed -n '/ie*k/p'
$ik
  • 利用 .* 能夠匹配任意數量的任意字符
  • 星號還能用在字符組上,表示可能出現的屢次字符組和字符區間

3.POSIX擴展正則表達式(ERE)引擎,適用於gawk,不適用於sed

其實就是對基礎表達式中星號的細化正則表達式

1.問號
  • 問號,代表前面的字符出現0或者1次
2.加號
  • 加號,代表前面的字符至少出現1次
3.花括號
  • {m},正好出現m次
  • {m,n},至少出現m次,至多出現n次
4. 管道
  • 能夠利用管道,用邏輯OR指定正則表達式引擎要用的兩個或多個模式
$echo "The cat is sleeping" | gawk '/cat|dog/{print $0}'
$The cat is sleeping
$echo "The dog is sleeping" | gawk '/cat|dog/{print $0}'
$The dog is sleeping
5.表達式分組
  • 用括號將一組字符括起來能夠當單個字符用
  • 模式(c|b)a(b|t)會匹配第一組字母的任意組合以及第二組中字母的任意組合
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息