正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
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 次之间的项 |
\ |
是一个转义字符,当我们需要在我们的搜索中包含一个元字符时使用 |
更详细案例:
^ 匹配开头的字符
1
2
3
4
5
6
7[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$ 匹配结尾的字符
1
2
3
4
5
6
7
8[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.
点将匹配任意字符1
2
3
4
5[root@blog.puppeter.com_centos ~]# echo '1121、1122、112abc、1123131231' | grep -Eo '112.'
1121
1122
112a
1123[ ]
将匹配一个字符范围,其中^表示取反,-表示取范围1
2
3
4
5
6
7
8
9
10
11
12
13[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*
将匹配零个或多个前面的项1
2
3
4
5[root@blog.puppeter.com_centos ~]# echo "112、1122、1122222、1123131231" | grep -Eo '1122*'
112
1122
1122222
112+
将匹配一个或多个前面的项1
2
3[root@blog.puppeter.com_centos ~]# echo "abc abbc abbb" | grep -Eo 'ab+c'
abc
abbc() 通常用于取一个单词或者或者的情况,譬如(glad) 或 (good) 这两个字串,通过|来分割或的关系
1
2
3[root@blog.puppeter.com_centos ~]# echo "gland good group" | grep -Eo "g(lan|oo)d"
gland
good?将匹配零个或一个前面的项
1
2
3[root@blog.puppeter.com_centos ~]# echo "ac abc " | grep -Eo 'ab?c'
ac
abc{n}
将匹配 n 次前面的项1
2[root@blog.puppeter.com_centos ~]# echo "abcdef aaacc aaca" | grep -Eo 'a{3}'
aaa{n,}
将匹配 n 次或更多前面的项1
2
3[root@blog.puppeter.com_centos ~]# echo "abcdef aaacc aaaaca" | grep -Eo 'a{3,}'
aaa
aaaa{n,m}
将匹配在 n 和 m 次之间的项1
2
3
4[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\
是一个转义字符,当我们需要在我们的搜索中包含一个元字符时使用1
2[root@blog.puppeter.com_centos ~]# echo "[]" | grep -Eo "\[\]"
[]