- 樹莓派創客:手把手教你玩轉人工智能
- 陳佳林
- 1230字
- 2020-11-23 16:49:19
1.4.3 正則表達式
在介紹完這些指令的基本功能之后,我們在這里對正則表達式做一個入門的講解。如果你對這一部分不是特別感興趣,可以暫時跳過,這將不會對你的后續學習有任何影響。
為什么要使用正則表達式呢?正則表達式被我們用來匹配一定的文本模式。更具體地說,它可以被用來處理一類特定的文件。舉個比較簡單的例子,你想要處理文件夾下所有的txt文件,那么你可以使用*.txt這樣的表達式來匹配所有的文本文件,使得同時處理大量的文件變成非常簡單的一件事情。
接下來介紹一下基本的語法。鑒于篇幅的限制,不可能做原理上的詳細講解,但會嘗試以一種簡單易懂的方式介紹清楚基本的語法。
正則表達式中的匹配主要依賴于特殊字符,在Linux命令行下的這種正則表達式語法下,.*[]^${}\+?|()被定義為特殊字符。碰到了一個問題,如果想要匹配的文本里本身就包含這些特殊字符怎么辦呢?
答案很簡單,你只需要把這些特殊字符進行轉義,而轉義的工具本身也是特殊字符\。接下來在講解示例的過程中會用到一個命令awk。awk是Linux系統上非常流行的行處理器,它的特點是一行一行地處理數據,然后進行處理化的輸出。
請看一個簡單的示例:
$ awk '{print $0}' /etc/passwd
這條指令的意思是原封不動地打印/etc/passwd的內容。$0代表整行內容。再看下面的示例:
$ awk '{print " "}' /etc/passwd
這條指令的意思是打印與/etc/passwd具有相同行數的空行。從這兩條語句的輸出行為可以看出awk按行處理文件的特性。在一行一行獲取到文本內容后,awk提供了很多處理的相關功能,在這里我們就不進行介紹了,因為awk并不是這里講解的重點。
接下來回到正則表達式的講解部分。下面的指令展示了該如何匹配特殊字符:
$ echo "\ is a special character" | awk '/\\/{print $0}'
在這里我們用\\轉義\符號。這里的//表示awk里的匹配代碼塊,后面這句awk的意思可以理解為輸出匹配成功的所有整行。
因為//也有對應的特殊含義,所以也需要轉義,示例如下:
$ echo "3 / 2" | awk '/\//{print $0}'
接下來我們講解正則表達式里的其他一些問題。你可能會在實際使用中碰到這樣的情況,一個單詞在句子中多次出現,但你只想匹配那種單詞在開頭出現的模式,那么你需要用到^符號,它匹配的不是文本,而是位置(這在一開始可能難以理解,你需要想清楚這里位置的含義)。舉例來說:
$ echo "welcome to likegeeks website" | awk '/^likegeeks/{print $0}'
沒有對應的輸出,而
$ echo "likegeeks website" | awk '/^likegeeks/{print $0}'
輸出likegeeks website。
接下來是匹配的重頭戲“.”符號。“.”符號可以匹配除了空字符串外的所有字符,比如:
$ cat myfile this is a test This is another test And this is one more start with this
$ awk '/.st/{print $0}' myfile
輸出:
this is a test This is another test
如果你不想匹配所有的字符,而僅僅是幾個特定的字符,可使用[]符號,例如:
$ awk '/[oi]th/{print $0}' myfile
輸出如下:
this is a test This is another test
我們甚至可以反向選擇,排除對應的字符,示例如下:
$ awk '/[^oi]th/{print $0}' myfile
這樣會排除有o和i出現的情況。
使用-字符可以表示范圍,示例如下:
$ awk '/[e-p]st/{print $0}' myfile
最后看一看“*”符號。在正則表達式里,它有不太一樣的含義,這一點在使用的時候千萬不要混淆。“*”在bash里有著與剛才“.”類似的含義,但可以匹配多個字符;而在正則表達式里,它并不匹配字符,而是表示一個模式可以重復多次或零次。
$ echo "st" | awk '/s[ae]*t/{print $0}'
輸出st。
$ echo "awwwwwk" | awk '/aw*k/{print $0}'
輸出awwwwwk。
- 21小時學通AutoCAD
- Dreamweaver CS3網頁設計與網站建設詳解
- 精通Excel VBA
- 最簡數據挖掘
- CompTIA Linux+ Certification Guide
- 精通數據科學算法
- Implementing AWS:Design,Build,and Manage your Infrastructure
- Windows Server 2003系統安全管理
- Containers in OpenStack
- 單片機技術項目化原理與實訓
- Mastering Predictive Analytics with scikit:learn and TensorFlow
- PowerPoint 2010幻燈片制作高手速成
- Serverless Design Patterns and Best Practices
- SolarWinds Server & Application Monitor:Deployment and Administration
- Flash CS3動畫制作融會貫通