在使用sed和gawk時若是可以熟練的使用正則表達式,能夠準確的過濾到本身須要的信息linux
Linux中,有兩種流行的正則表達式引擎:git
基本上沒什麼可寫的,區分大小寫,多個空格也能夠匹配。正則表達式
正則表達式識別的特殊字符包括這些,若是須要使用特殊字符,須要轉義符(\)。ide
.*[]^${}\+?|()
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
匹配除換行符以外的任意單個字符。this
sed -n '/.at/p' data6
使用方括號來定義字符組spa
sed -n '/[ch]at/p' data6 echo "Yes" | sed -n '/[Yy]es/p'
也能夠反轉字符組的做用,在字符組的開頭加個脫字符code
sed -n '/[^ch]at/p' data6
用破折號能夠表示字符中間的內容,第一個字符,破折號,最後一個字符blog
sed -n '/^[0-9][0-9][0-9][0-9][0-9]$/p' data8
這些表達式能夠像普通字符組同樣使用。it
echo "abc" | sed -n '/[[:digit:]]/p' echo "abc" | sed -n '/[[:alpha:]]/p' echo "abc123" | sed -n '/[[:digit:]]/p'
星號代表該字符必須在匹配模式的文本中出現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'
問號代表前面的字符能夠出現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}'
加號代表前面的字符能夠出現1次或屢次,但必須至少出現1次。
echo "beeet" | gawk '/be+t/{print $0}' echo "beet" | gawk '/be+t/{print $0}' echo "bet" | gawk '/be+t/{print $0}'
花括號容許你可重複的正則表達式指定一個上限。這一般成爲間隔,能夠用兩種格式來指定區間。
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}'
就是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}'
使用園括號進行分組,當你將正則表達式模式分組時,該組會被視爲一個標準字符。
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}'