linux萬用字元的英文名是wildcard,說白了一般只用於檔名匹配, 它是由shell解析的。而正規表示式呢?從簡單的角度去理解,你可以把正規表示式看成是一種字串匹配模式標準。
通配是把乙個包含萬用字元的 非具體檔名 擴充套件儲存在計算機、伺服器或者網路上的 一批具體檔名 的過程。萬用字元是模糊匹配的基礎,因為萬用字元機制的存在使得我們在查詢檔案的時候非常方便。常用的萬用字元如下:
- 代表任意字元(0到多個)
? 代表乙個任意字元
代表匹配指定範圍內的單個字元。例如 [abcd] 代表一定有乙個字元, 可能是 a, b, c, d 這四個之中的任何乙個。
[ - ] 若有減號在中括號內時,代表在編碼順序內的所有字元。例如 [0-9] 代表 0 到 9 之間的所有數字,因為數字的語系編碼是連續的。
[^ ] 若中括號內的第乙個字元為指數符號 (^) ,那表示反向選擇,匹配指定範圍外的任意單個字元,例如 [^abc] 代表 一定有乙個字元,只要是非 a, b, c 的其他字元就接受的意思。
- [^[0-9]]或[^0-9] 表示匹配數字外的任意字元
- [^[:upper:]] 表示匹配大寫字母外的任意字元
- pa[0-9] 表示pa後面匹配乙個數字
- pa[0-9][0-9] pa後面匹配兩個數字
- [[:upper:]] 表示所有大寫字母
- [[:lower:]] 表示所有小寫字母
- [[:alpha:]] 表示所有字母
- [[:digit:]] 表示所有數字
- [[:alnum:]] 表示所有的字母和數字
- [[:space:]] 表示所有的空白字元
- [[:punct:]] 表示所有的標點符號特殊符號
\ 轉義字元 將特殊字元或萬用字元還原成一般符號
; 連續命令分割符號
/ 目錄符號,路徑分割
# 注釋說明
$ 變數前需要加的變數值正規表示式re(regular expression)是由一串字元和元字元(描述字元的字元)構成的字串。
正規表示式的主要功能是文字查詢和字串操作,它可以匹配文字的乙個字元或字元集合。實際上正規表示式完成了資料的過濾,將不滿足正規表示式定義的資料拒絕掉,剩下與正規表示式匹配的資料。
bash shell本身不支援正規表示式,使用正規表示式的是shell命令和工具,如grep,sed,awk。grep:文字過濾工具,基於正規表示式進行模式匹配
sed:stream editor 流編輯器
awk:linux上實現為gawk,文字報告生成器(格式化文字)
grep
文字搜尋工具,根據使用者指定的模式,對目標文字逐行進行匹配檢查,列印匹配到的行 基於perl的正規表示式使用格式:grep [選項] 匹配模式 file物件
選項說明:
-e:使用擴充套件正規表示式,等同於egrep
-f:使用固定字串進行匹配
-l:列出匹配模式的檔名稱,而不是列印匹配的行
-q:靜默模式,匹配grep則成功退出,不匹配則寫入標準輸出
-s:不顯示錯誤資訊
-i:忽略字元大小寫
-v:反向查詢,顯示沒有被模式匹配到的行
-o:只顯示被模式匹配到的字串
-a(after):顯示匹配到的行和其後面的行,給乙個數字
grep -a 1 root /etc/passwd
-b(before):顯示匹配到的行和其前面的行,給乙個數字
grep -b 1 root /etc/passwd
-c(center):顯示匹配到的行和其前後的行,給乙個數字
grep -c 1 root /etc/passwd
–color:顯示顏色
# alias grep='grep --color'
# grep 'root' /etc/passwd1、字元匹配
. 匹配任意單個字元
匹配指定範圍內的任意單個字元
[^ ] 匹配指定範圍外的任意單個字元
[[:digit:]] [[:lower:]] [[:upper:]] [[:alpha:]] [[:alnum:]] [[:punct:]] [[:space:]]2、匹配次數
用在要指定其出現的次數的字元的後面,用於限制其前面字元出現的次數,預設為貪婪模式
* 表示匹配其前面的字元任意次,0,1,多次
.* 匹配任意長度的任意字元
\? 匹配其前面的字元0次或一次
\+ 匹配其前面的字元一次或多次,即其前面的字元要出現至少一次
\ 精確匹配到其前面字元的m次
\ 匹配其前面的字元至少m次,至多n次
\ 匹配其前面的字元至多n次
\ 匹配其前面的字元至少m次3、位置錨定
^ 行首錨定,用於模式的最左邊
$ 行尾錨定,用於模式的最右邊
^pattern$ 用於pattern來匹配整行
^$ 匹配空白行
^[[:space:]]$ 匹配空行或空白字元的行
單詞 非特殊字元組成的連續字元都稱為單詞
\< 或 \b 詞首錨定,用於單詞模式的左側
\> 或 \b 詞尾錨定,用於單詞模式的右側
\ 匹配完整單詞egrep等效於grep -e ,基於擴充套件的正規表示式做模式匹配,那什麼是擴充套件的正規表示式(extended regular expression, ere)呢?
支援擴充套件的正規表示式實現類似於grep文字過濾功能:grep -e
-o , -i , -v , -q , -a , -b , -c ,
-g:表示支援基本正規表示式
擴充套件正規表示式的元字元
1:字元匹配
. :匹配任意單個字元
[ ]:匹配指定範圍內的任意單個字元
[^ ]:匹配指定範圍外的任意單個字元
[[:digit:]] [[:lower:]] [[:upper:]] [[:alpha:]] [[:alnum:]] [[:punct:]] [[:space:]]2:次數匹配 (相對於基本正規表示式,它不用再加反斜槓)
*:任意次,0,1或多次
?:0次或1次,其前的字元是可有可無的
+:其前字元至少1次
:匹配其前的字元m次
:至少m次,至多n次
:至多n
:至少m次3:位置錨定
^:行首錨定
$:行尾錨定
\< 或 \b:詞首錨定,用於單詞模式的左側
\> 或 \b:詞尾錨定,用於單詞模式的右側4:分組及引用 (分組和引用,也就搞定了python的正規表示式)
對乙個正規表示式模式或部分模式兩邊新增圓括號將導致相關匹配儲存到乙個臨時緩衝區中,所捕獲的每個子匹配都按照在正規表示式模式中從左到右出現的順序儲存。緩衝區編號從 1 開始,最多可儲存 99 個捕獲的子表示式。每個緩衝區都可以使用 \n 訪問,其中 n 為乙個標識特定緩衝區的一位或兩位十進位制數。
( ):分組,括號內的模式匹配到的字元會被記錄到正規表示式引擎的內部變數中
後向引用:/1, /2
[root@7 yhy2]# cat yhy
wo love wo
ni love ni
ta love ta
egrep "(w.).*\1" yhy
wo love wo5、|
a | b:表示a或者b ---> grep "a|b" yhy
c|cat:c或者cat
(c|c)at:cat或者cat1:顯示/etc/passwd檔案中不以/bin/bash結尾的行
grep -v .*/bin/bash$ /etc/passwd
或grep -v "/bin/bash" /etc/passwd
其中,-v 表示顯示沒有匹配到的行; .* 表示任意長度的任意字元; $表示行尾錨定,匹配輸入字串的結尾位置2:找出/etc/passwd檔案中的兩位數或三位數的行
egrep [0-9] /etc/passwd
其中[0-9]代表0到9之間的任意乙個數字; 表示匹配其前面的字元至少2次,至多3次3:找出/etc/rc.d/rc.sysinit(centos 6)或/etc/grub2.cfg(centos 7)檔案中,以至少乙個空白字元開頭,且後面有非空白字元的行
egrep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
其中^[[:space:]] 表示以空白字元開頭; [^ ] 表示匹配範圍外的任意單個字元;+ 表示匹配1次或多次,至少1次4:找出」netstat -tan」命令的結果中以』listen』後跟0、1或多個空白字元結尾的行
nestat -tan |grep "lisen[[:space:]]*$"
注意:區分 * 和 + ,*表示任意次,0,1或多次;+表示1次或多次,至少1次
linux 正規表示式和萬用字元
linux 正規表示式和萬用字元 萬用字元用於查詢檔案 包含三種 代表任意個任意字元 代表任意乙個字元 代表中括號中的乙個字元 正規表示式 正則是包含匹配,只要包含就可以匹配上,比如 0 9 可以匹配 7dfssf a 表示0到n個a,這個表達沒有任何含義,和 意義相同 匹配任意乙個字元 s.d 表...
Linux正規表示式 萬用字元
萬用字元元字元或者句點 被認為是與變數等價的。變數表示算術表示式中的任意值。在正規表示式中,句點 是代表除換行符以外的任意字元的萬用字元 在awk中,句點甚至可以匹配嵌入式換行符 假定我們正在描述乙個字串行,使用萬用字元元字元可以指定任何字元都可以填充的乙個位置。例如,如果要索索包含intel系統微...
正規表示式 和 萬用字元
正規表示式 正規表示式主要是用來描述乙個句法規則的模式。其實說的通俗一點,就是利用字元和元字元的組合,對一些符合既定句法的模式進行模糊匹配。它的主要功能是文字查詢和字串操作。正規表示式的基本元素包括普通字元和元字元,在linux shell裡面,常用的正規表示式元字符集為 s 每乙個元字元都有自己在...