## 正則表達式
正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式\(規則\)的文本。
[https://github.com/wzb56/13\_questions\_of\_shell/blob/master/15.regular-expression.md](https://github.com/wzb56/13_questions_of_shell/blob/master/15.regular-expression.md)
# grep命令
因為本節正則大部分使用了grep命令,這里有必要介紹一下常用的兩個參數:
* -E --extended-regexp
* -o --only-matching 只顯示匹配的內容
# 基礎的正則表示式表格與案例
| 元字符 | 描述 |
| ------ | ------ |
| ^ | 匹配開頭的字符 |
| $ | 匹配結尾的字符 |
| . | 點將匹配任意字符 |
| [ ] | 將匹配一個字符范圍,其中^表示取反,-表示取范圍 |
| * | 將匹配零個或多個前面的項 |
| + | 將匹配一個或多個前面的項 |
| \(\) | 通常用于取一個單詞或者或者的情況,譬如\(glad\) 或 \(good\) 這兩個字串,通過\|來分割或的關系|
| ? | 將匹配零個或一個前面的項 |
| `{n}` | 將匹配 n 次前面的項 |
| `{n,}` | 將匹配 n 次或更多前面的項 |
| `{n,m}` | 將匹配在 n 和 m 次之間的項 |
| `\` | 是一個轉義字符,當我們需要在我們的搜索中包含一個元字符時使用 |
更詳細案例:
* ^ 匹配開頭的字符
```
[root@blog.puppeter.com_centos ~]# cat /etc/passwd | grep -E "^root"
root:x:0:0:root:/root:/bin/bash
[root@blog.puppeter.com_centos ~]# cat /etc/passwd | grep -E "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:994:991:Docker User:/var/lib/docker:/sbin/nologin
```
* $ 匹配結尾的字符
```
[root@blog.puppeter.com_centos ~]# cat /etc/passwd | grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:994:991:Docker User:/var/lib/docker:/sbin/nologin
[root@blog.puppeter.com_centos ~]# cat /etc/passwd | grep "root" | grep "nologin$"
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:994:991:Docker User:/var/lib/docker:/sbin/nologin
```
* `.` 點將匹配任意字符
```
[root@blog.puppeter.com_centos ~]# echo '1121、1122、112abc、1123131231' | grep -Eo '112.'
1121
1122
112a
1123
```
* `[ ]`將匹配一個字符范圍,其中^表示取反,-表示取范圍
```
[root@blog.puppeter.com_centos ~]# echo "a b c d " | grep -Eo '[abc]'
a
b
c
[root@blog.puppeter.com_centos ~]# echo "a b c d " | grep -Eo '[^abc]'
d
[root@blog.puppeter.com_centos ~]# echo "a b c d 1 2 3" | grep -Eo "[a-z]"
a
b
c
d
```
* `*`將匹配零個或多個前面的項
```
[root@blog.puppeter.com_centos ~]# echo "112、1122、1122222、1123131231" | grep -Eo '1122*'
112
1122
1122222
112
```
* `+`將匹配一個或多個前面的項
```
[root@blog.puppeter.com_centos ~]# echo "abc abbc abbb" | grep -Eo 'ab+c'
abc
abbc
```
* \(\) 通常用于取一個單詞或者或者的情況,譬如\(glad\) 或 \(good\) 這兩個字串,通過\|來分割或的關系
```
[root@blog.puppeter.com_centos ~]# echo "gland good group" | grep -Eo "g(lan|oo)d"
gland
good
```
* ?將匹配零個或一個前面的項
```
[root@blog.puppeter.com_centos ~]# echo "ac abc " | grep -Eo 'ab?c'
ac
abc
```
* `{n}`將匹配 n 次前面的項
```
[root@blog.puppeter.com_centos ~]# echo "abcdef aaacc aaca" | grep -Eo 'a{3}'
aaa
```
* `{n,}`將匹配 n 次或更多前面的項
```
[root@blog.puppeter.com_centos ~]# echo "abcdef aaacc aaaaca" | grep -Eo 'a{3,}'
aaa
aaaa
```
* `{n,m}`將匹配在 n 和 m 次之間的項
```
[root@blog.puppeter.com_centos ~]# ifconfig | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
127.0.0.1
10.65.86.40
10.65.86.255
```
* `\`是一個轉義字符,當我們需要在我們的搜索中包含一個元字符時使用
```
[root@blog.puppeter.com_centos ~]# echo "[]" | grep -Eo "\[\]"
[]
```
- Introduction
- 1.Shell編程基礎
- 什么是Shell
- 編寫第一個Bash程序
- 2.變量
- 什么是變量
- 變量四種賦值方式
- 指定變量類型
- 變量的類型
- 特殊變量
- 3.Bash符號相關
- Bash符號相關
- 特殊符號
- 數學運算符號
- 4.內建命令與外部命令
- 內建命令與外部命令
- 5.read命令
- read命令
- 6.條件語句
- if..then..fi
- if..then..else..fi
- if..then..elif..fi
- 空命令
- 文件測試符
- 字符串判斷、與、或和非
- []與[[]]符號
- 7.Bash循環 && 分支語句
- while循環語句
- for循環
- for..in循環
- until循環
- select循環
- case分支語句
- 8.正則表達式
- 正則表達式
- 9.子Shell和受限Shell
- 子Shell
- 受限Shell
- 10.函數與函數的加載
- 函數語法與案例
- 遞歸函數
- 函數的加載
- 11.Bash腳本風格
- Bash腳本風格
- 12.Bash腳本調試
- Bash腳本調試
- 13.sed && awk
- sed
- 14.awk
- awk
- 15 Bash雜項 && 案例
- while循環的陷阱
- Bash的生命周期
- IO重定向
- /bin/bash和/bin/sh區別
- 命令雜項
- Shell加密
- 16.10.2.案例
- Bash版回收站
- 17.Bash中文速查表
- 中文速查表