shell學習----正則表達式

在使用sed和gawk時若是可以熟練的使用正則表達式,能夠準確的過濾到本身須要的信息linux

Linux中,有兩種流行的正則表達式引擎:git

  • POSIX基礎正則表達式,BRE引擎
  • POSIX擴展正則表達式,ERE引擎

 

1、BRE模式

1.1 純文本

基本上沒什麼可寫的,區分大小寫,多個空格也能夠匹配。正則表達式

 

1.2 特殊字符

正則表達式識別的特殊字符包括這些,若是須要使用特殊字符,須要轉義符(\)。ide

.*[]^${}\+?|()

 

 1.3 錨字符

  • 或字符(^)鎖定在行首
  • 美圓符($)鎖定在行尾
  • 兩個組合(^$)能夠過濾空行
sed -n '/^this/p' data3 
echo "This ^ is a test" | sed -n '/s ^/p'

echo "This is a good book" | sed -n '/book$/p'
echo "This book is good" | sed -n '/book$/p'

sed -n '/^this is a test$/p' data4
sed '/^$/d' data5
使用例子

 

1.4 點號字符

 匹配除換行符以外的任意單個字符。this

sed -n '/.at/p' data6

 

1.5 字符組

 使用方括號來定義字符組spa

sed -n '/[ch]at/p' data6
echo "Yes" | sed -n '/[Yy]es/p'

 

1.6 排除型字符組

 也能夠反轉字符組的做用,在字符組的開頭加個脫字符code

sed -n '/[^ch]at/p' data6

 

1.7 區間

 用破折號能夠表示字符中間的內容,第一個字符,破折號,最後一個字符blog

sed -n '/^[0-9][0-9][0-9][0-9][0-9]$/p' data8

 

1.8 特殊的字符組

  • [[:alpha:]]       匹配任意字母字符,無論是大寫仍是小寫
  • [[:alnum:]]           匹配任意字母數字字符0~九、A~Z或a~z
  • [[:blank::]]           匹配空格或製表符
  • [[:digit:]]              匹配0~9之間的數字
  • [[:lower:]]            匹配小寫字母字符a~z
  • [[:print:]]             匹配仍以可打印字符
  • [[:punct:]]           匹配標點符號
  • [[:space:]]          匹配任意空白字符:空格、製表符、NL、FF、VT和CR
  • [[:upper:]]          匹配任意大寫字母字符A~Z

這些表達式能夠像普通字符組同樣使用。it

echo "abc" | sed -n '/[[:digit:]]/p'
echo "abc" | sed -n '/[[:alpha:]]/p'
echo "abc123" | sed -n '/[[:digit:]]/p'

 

1.9 星號

星號代表該字符必須在匹配模式的文本中出現0次或屢次 event

echo "ik" | sed -n '/ie*k/p'
echo "iek" | sed -n '/ie*k/p'
echo "ieek" | sed -n '/ie*k/p'
echo "ieeek" | sed -n '/ie*k/p'

 

2、ERE模式

2.1 問號

問號代表前面的字符能夠出現0次或1次。

echo "bt" | gawk '/be?t/{print $0}'
bt
echo "bet" | gawk '/be?t/{print $0}'
bet
echo "beet" | gawk '/be?t/{print $0}'

echo "beeet" | gawk '/be?t/{print $0}'

 

2.2 加號

加號代表前面的字符能夠出現1次或屢次,但必須至少出現1次。

echo "beeet" | gawk '/be+t/{print $0}'

echo "beet" | gawk '/be+t/{print $0}'

echo "bet" | gawk '/be+t/{print $0}'

 

2.3 花括號

花括號容許你可重複的正則表達式指定一個上限。這一般成爲間隔,能夠用兩種格式來指定區間。 

m:正則表達式準確出現m次。

m,n:正則表達式至少出現m次,至多n次。

echo "bt" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'

echo "bat" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'

echo "bet" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'

 

2.4 管道符號

就是linux裏的|符號,同樣的管道。應該是邏輯或的感受

echo "The cat is asleep" | gawk '/cat|dog/{print $0}'
The cat is asleep
echo "The dog is asleep" | gawk '/cat|dog/{print $0}'
The dog is asleep
echo "The sheep is asleep" | gawk '/cat|dog/{print $0}'

 

2.5 表達式分組 

使用園括號進行分組,當你將正則表達式模式分組時,該組會被視爲一個標準字符。

echo "Sat" | gawk '/Sat(urday)?/{print $0}'
Sat
echo "Saturday" | gawk '/Sat(urday)?/{print $0}'

echo "cat" | gawk '/(c|b)a(b|t)/{print $0}'
cat
echo "cab" | gawk '/(c|b)a(b|t)/{print $0}'
cab
echo "bat" | gawk '/(c|b)a(b|t)/{print $0}'
bat
echo "bab" | gawk '/(c|b)a(b|t)/{print $0}'
bab
echo "tab" | gawk '/(c|b)a(b|t)/{print $0}'

echo "tac" | gawk '/(c|b)a(b|t)/{print $0}'
相關文章
相關標籤/搜索