在linux中,因為一切都是檔案,所以文字操作占有很大的比重,正規表示式是一門處理文字的強大的工具。
正規表示式用來識別文字,和匹配檔案或者路徑名的shell萬用字元比較相似。許多命令列工具都能提供對正規表示式的支援,其中grep是用得最多的工具。
grep的用法
grep search_phrase filename
在filename表示的檔案中查詢包含search_phrase的檔案。grep的主要選項如下:
選項作用
-i忽略大小寫,查詢文字不區分大小寫
-v不匹配,反向作用。通常grep會列印包含查詢文字的檔案,加上改選項會列印不包含該文字的檔案
-c列印匹配檔案的數量
-l列印包含查詢文字的檔名,而不是文字行,預設是文字行
注:grep是根據檔案的內容進行查詢,會對檔案的每一行按照給定的模式(pattern)進行匹配查詢。
和find結合使用的時候grep也是在find命令的輸出的檔案的內容中查詢。
正規表示式
正規表示式和shell萬用字元一樣也包含許多特殊字元,除了這些特殊字元之外其餘的全是原義字元。
特殊字元 字元
作用^1.^在字串開頭時表示文字開頭
2.^在中的第乙個位置時表示否定,其他位置時是普通字元
$1.字元末尾
2.變數值獲取
.任意單個字元
括號中的任意乙個單個字元,特殊字元在中失去特殊含義(如\反斜),除了^和-在指定的位置時。
]位於第乙個位置時表示]是集合中的乙個元素,不代表結束。
{}匹配特定的次數(重複)。在bash中還可以表示命令集合或者目錄分隔。
-在中非第乙個和最後乙個位置時表示範圍。具體的值和特定的語系有關。
?表示0個或一次(重複)。在shell中代表乙個任意的字元。
*任意多次重複(重複)。在bash中代表任意長度的任意字串。
+至少一次的重複(重複)
()分組符。在bash中表示子shell指定的命令。
|邏輯或。在bash中表示管道。
\轉義字元,用於將元字元轉義成普通字元和將普通字元轉義成特殊字元。如:
換行符 \n
回車符 \r
製表符 \t
當我們在bash中傳遞包含元字元的正規表示式的時候,把特殊字元用單引號引起來至關重要,這樣可以阻止 shell 試圖展開它們。
下面就來解釋一下語系與正規表示式範圍的關係:
正規表示式是處理字串的表示方式,那麼對字元的排序有影響的語系配置就會對正規表示式產生影響。
舉例來說,英文和數字的編碼順序在en_us.utf8及c 這兩種語系的輸出結果分別如下:
lang=c:0 1 2 3 4 ... a b c d ... z a b c d ...z
lang=en_us.utf8:0 1 2 3 4 ... a a b b c c d d ... z z
從上面可以發現不同的語系中字元的排序是不一樣的。
如果你想要獲取大寫的字元而使用[a-z] 時,會發現lang=c(或者posix)時是連續的大寫字元。
但是如果使用en_us.utf8時,會發現會取出除了小寫a以外的所有字母。因為排序的順序是【a b b c c d d ... z z】。
所以,使用這則表示式時,需要特別留意當時環境的語境是什麼,否則會發現獲取的結果和別人是不一樣的。
修改語系
在linux中可以使用locale檢視語系環境,語系配置檔案是/etc/default/locale(ubuntu)或者/etc/sysconfig/i18n(centos)
由於不同的語系對正規表示式,所以需要乙個統一的表示方法來表示,下面這個符號在各語系下是一致的:
Linux正規表示式grep
正規表示式是一種符號表示法,用於識別文字模式。linux處理正規表示式的主要程式是grep。grep搜尋與正規表示式匹配的行,並將結果輸送至標準輸出。1.grep匹配模式 grep按下述方式接受選項和引數 其中,regex表示正規表示式 1 grep options regex files 其中op...
Linux正規表示式 grep
grep命令 grep cinvabc word filename常用選項解釋 c 列印符合要求的行數。i 忽略大小寫。n 輸出符合要求的行及行號。v 列印不符合要求的行。a 後跟數字n 有無空格都可 列印符合要求的行和下面n行。b 後跟數字n,列印符合要求的行和上面n行。c 後跟數字n,列印符合要...
Linux正規表示式 grep
一 正規表示式 正規表示式描述了乙個字串匹配的規則,常用來匹配滿足匹配規則的文字。它定義了自己的語法,正規表示式中的字元可以分為普通字元和元字元,元字元在正規表示式中有特殊的含義。先看一下簡單的正規表示式 bhelloworld b 這個正規表示式用來精確匹配helloworld這個字串。b是乙個元...