Linux正则表达式-单词

也许你已经发现,有时匹配完整的单词很难。例如,如果想匹配模式"book",搜索会命中包含单词"book"和"books"的行,而且还有单词"bookish"、"handbook"和"booky"。很显然可以在"book"前后使用空格来限制匹配情况。
□book□

然而,这个表达式只匹配单词"book",它会丢掉它的复数形式"books" 。为了匹配单数或复数单词,可能要使用星号元字符:
□books*□

这样就可以匹配"book" 或"books" 。然而,如果单词后面有句点、逗号、问好或引号时就不会匹配"book" 。

当将星号和通配符元字符(.)结合起来使用时,可以匹配任意字符的零次或多次出现。在前面的示例中,可以像下面这样编写比较完整的正则表达式:
□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中不可用,我们必须求助于字符类,这些在后面将会看到。

尝试用正则表达式包括一切并不实际,尤其是在使用grep时,有时最好使表达式保持简单并允许遗漏。然而,当在sed中使用正则表达式进行替换时,就需要注意的是使用的表达式应该完整。在本站之后的文章中我们将会看到用于搜索单词更全面的正则表达式。

参考资料:http://www.linuxawk.com/communication/434.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。