標籤:linuxRegex
也許你已經發現,有時匹配完整的單詞很難。例如,如果想匹配模式"book",搜尋會命中包含單詞"book"和"books"的行,而且還有單詞"bookish"、"handbook"和"booky"。很顯然可以在"book"前後使用空格來限制匹配情況。
□book□
然而,這個運算式只匹配單詞"book",它會丟掉它的複數形式"books" 。為了匹配單數或複數單詞,可能要使用星號元字元:
□books*□
這樣就可以匹配"book" 或"books" 。然而,如果單詞後面有句點、逗號、問好或引號時就不會匹配"book" 。
當將星號和萬用字元元字元(.)結合起來使用時,可以匹配任一字元的零次或多次出現。在前面的樣本中,可以像下面這樣編寫比較完整的Regex:
□book.*□
這個運算式匹配字串"book" ,其後面跟有任意個字元或沒有字元,最後跟著空格。下面是將要匹配的幾行:
Here are the books that you requested
Yes, it is a good book for children
It is amazing to think that it was called a "harmful book" when
once you get to the end of the book, you can‘t believe
(注意只有第二行可以和固定字串"□book□"匹配。)運算式"□book.*□"匹配包含類似與單詞"booky" 、"bookworm" 和"bookish"的行。通過使用不同的修飾符可以排除這些匹配中的兩種。問號(?)是元字元的擴充集的一部分,匹配前面運算式的0次或1次出現。因此,運算式:
□book.?□
將與"book,"、"books, "和"booky"匹配,而不與"bookish" 和"bookworm" 匹配。為了排除類似"booky"這樣的單詞,我們可以使用字元類來指定想要匹配的位置的所有字元。而且,因為元字元問號在sed中不可用,我們必須求助於字元類,這些在後面將會看到。
嘗試用Regex包括一切並不實際,尤其是在使用grep時,有時最好使運算式保持簡單並允許遺漏。然而,當在sed中使用Regex進行替換時,就需要注意的是使用的運算式應該完整。在本站之後的文章中我們將會看到用於搜尋單詞更全面的Regex。
參考資料:http://www.linuxawk.com/communication/434.html
LinuxRegex-單詞