Linux基礎命令-正則表達式和通配符
正則表達式和通配符
一、正則表達式
1.正則表達式概念
1.REGEXP: Regular Expressions,由一類特殊字符及文本字符所編寫的模式,
其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
2.程序支持:grep,sed,awk,vim, less,nginx,varnish等
3.分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep
4.正則表達式引擎:
採用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
5.元字符分類:字符匹配、匹配次數、位置錨定、分組
6.man 7 regex
2.字符匹配
字符匹配:
. 匹配任意單個字符
[] 匹配指定範圍內的任意單個字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定範圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母 [:upper:] 大寫字母
[:blank:] 空白字符(空格和製表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
[:digit:] 十進制數字 [:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
3.匹配次數
匹配次數:用在要指定次數的字符後面,用於指定前面的字符要出現的次數
* 匹配前面的字符任意次,包括0次
貪婪模式:儘可能長的匹配
.* 任意長度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
4.位置錨定
位置錨定:定位出現的位置
^ 行首錨定,用於模式的最左側
$ 行尾錨定,用於模式的最右側
^PATTERN$ 用於模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 詞首錨定,用於單詞模式的左側
\> 或 \b 詞尾錨定,用於單詞模式的右側
\<PATTERN\> 匹配整個單詞
5.分組
1.分組:\(\) 將一個或多個字符捆綁在一起,當作一個整體處理,如:\(root\)\+
2.分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些
變量的命名方式爲: \1, \2, \3, ...
3.\1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
4.示例: \(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2
6.後向引用
1.後向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身
2.或者:\|
示例:a\|b a或b
C\|cat C或cat
\(C\|c\)at Cat或cat
7.擴展正則表達式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
1.字符匹配:
. 任意單個字符
[] 指定範圍的字符
[^] 不在指定範圍的字符
2.次數匹配:
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m,至多n次
3.位置錨定:
^ 行首
$ 行尾
\<, \b 語首
\>, \b 語尾
4.分組:
()
後向引用:\1, \2, ...
5.或者:
a|b a或b
C|cat C或cat
(C|c)at Cat或cat
二、通配符
1.通配符
通配符是shell在做PathnameExpansion時用到的。說白了一般只用於文件名匹配,
它是由shell解析的,比如find,ls,cp,mv等。
2.Shell常見通配符
3.shell Meta字符(元字符)
shell 除了有通配符之外,還有一系列自己的其他特殊字符。
字符 說明
IFS 由 <space> 或 <tab> 或 <enter> 三者之一組成(我們常用 space )
CR 由 enter> 產生
= 設定變量
$ 取變量值或取運算值
> 重定向 stdout
< 重定向 stdin
| 管道符號
& 重導向 file descriptor ,或將命令置於背景執行
( ) 將其內的命令置於 nested subshell 執行,或用於運算或命令替換
{ } 將其內的命令置於 non-named function 中執行,或用在變量替換的界定範圍
; 在前一個命令結束時,而忽略其返回值,繼續執行下一個命令
&& 在前一個命令結束時,若返回值爲 true,繼續執行下一個命令
|| 在前一個命令結束時,若返回值爲 false,繼續執行下一個命令
! 運算意義上的非(not)的意思
# 註釋,常用在腳本中
\ 轉移字符,去除其後緊跟的元字符或通配符的特殊意義
4.轉義字符
有時候,我們想讓 通配符,或者元字符 變成普通字符,不需要使用它。
那麼這裏我們就需要用到轉義符了。 shell提供轉義符有三種。
字符 說明
‘’(單引號) 硬轉義,其內部所有的shell 元字符、通配符都會被關掉。
“”(雙引號) 軟轉義,其內部只允許出現特定的shell 元字符:$用於參數替換 `(反單引號,esc鍵下面)用於命令替換
\(反斜槓) 又叫轉義,去除其後緊跟的元字符或通配符的特殊意義