需要注意的是 在正则表达式中 grep 只支持普通正则字符,如果需要用到拓展字符则需要用到 grep - E 或者 egrep
1.正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。
2.在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式,它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,#元字符是最重要的概念。
#正则表达式分为:
正则表达式基本元字符
正则表达式拓展元字符
元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
No.1 正则表达式基本元字符
基本正则表达式元字符
元字符
示例 功能 示例
^ 行首定位符 ^love
$ 行尾定位符 love$
. 匹配单个字符 l..e
* 匹配前导符0到多次 ab*love
.* 匹配任意多个字符(贪婪匹配)
[] 匹配方括号中任意一个字符 [lL]ove
[ - ] 匹配指定范围内的一个字符 [a-z0-9]ove
[^] 匹配不在指定组里的字符 [^a-z0-9]ove
\ 用来转义元字符 love\.
\< 词首定位符 \<love
\> 词尾定位符 love\>
\(\) 匹配后的标签
No.2正则表达式拓展元字符
扩展正则表达式元字符 功能 示例 + 匹配一次或多次前导字符 [a-z]+ove ? 匹配零次或一次前导字符 lo?ve a|b 匹配a或b love|hate x{m} 字符x重复m次 o{5} x{m,} 字符x重复至少m次 o{5,} x{m,n} 字符x重复m到n次 o{5,10} () 字符组 ov+ (ov)+
扩展内容: 了解即可
自带的特殊字符正则表达式
1) [[:alpha:]] 匹配任何字母,无论大小写
2) [[:alnum:]] 匹配任何字母,无论大小写,还匹配数字0~9
3) [[:blank:]] 匹配空格和制表符
4) [[:digit:]] 匹配数字0~9
5) [[:upper:]] 匹配大写字母
6) [[:lower:]] 匹配小写字母
7) [[:punct:]] 匹配标点符号
8) [[:print:]] 匹配可打印字符
\w 匹配字母或数字或下划线或汉字 等价于 '[A-Za-z0-9_]'。(能不能匹配汉字要视你的操作系统和你的应用环境而定)
\s 匹配任意的空白符 (包含水平制表符)
\d 匹配数字
\b 匹配单词的开始或结束
shell 编程-grep
[root@localhost ~]# grep '^#' /etc/ssh/ssh_config #过滤以#号开头的行
[root@localhost ~]# grep -v '^#' /etc/ssh/ssh_config #-v:取反,表示反向查找
[root@localhost ~]# grep -i 'sendenv' /etc/ssh/ssh_config #-i忽略大小写
[root@localhost ~]# grep 'bash' /opt/test/ #过滤某个目录下面带有bash的行
[root@localhost ~]# grep -r 'bash' /opt/test/ #-[r|R]表示递归查询
grep正则过滤
#grep基本正则匹配
\< 词首定位符号 \>词尾定位符号
^ 以什么开头
[root@linux-server ~]# grep '^root' /etc/passwd
$ 以什么结尾
[root@linux-server ~]# grep 'bash$' /etc/passwd
. 匹配单个字符
[root@linux-server ~]# grep 'r..t' /etc/passwd
.* 任意多个字符
[root@linux-server ~]# grep 'r.*t' /etc/passwd
[ ] 匹配方括号中的任意一个字符
[root@linux-server ~]# grep '[Rr]oot' /etc/passwd
[ - ] 匹配指定范围内的一个字符
[root@linux-server ~]# grep [a-z]oot /etc/passwd #a-z
[^] 匹配不在指定组内的字符,非得意思
#注意:^在[ ]内表示取反,^在[ ]外表示以什么开头
[root@linux-server ~]# grep '[^0-9]' /etc/passwd
[root@linux-server ~]# grep '[^0-9A-Z]oot' /etc/passwd
\(\)匹配后的标签
[root@linux-server ~]# cat file1.txt
IPADDR=192.168.1.123
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS=114.114.114.114
:%s/\(192.168.1.\)123/\12/
:%s/\(192.\)\(168.\)\(1.\)12/\1\2\35/
#扩展正则匹配---egrep
扩展正则表达式元字符 功能 示例
+ 匹配一次或多次前导字符 [a-z]+ove
? 匹配零次或一次前导字符 lo?ve
a|b 匹配a或b love|hate
x{m} 字符x重复m次 o{5}
x{m,} 字符x重复至少m次 o{5,}
x{m,n} 字符x重复m到n次 o{5,10}
() 字符组 ov+ (ov)+
egrep 支持正则表达式的拓展元字符
[root@linux-server ~]# egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/resolv.conf
+ 匹配一个或多个前导字符
[root@linux-server ~]# egrep 'ro+t' /etc/passwd
a|b 匹配a或b
[root@linux-server ~]# netstat -anlp|egrep ':80|:22'
[root@linux-server ~]# egrep 'root|jack' /etc/passwd
x{m} 字符x重复m次
[root@linux-server ~]# cat a.txt
love
love.
loove
looooove
[root@linux-server ~]# egrep 'o{2}' a.txt
loove
looooove
[root@linux-server ~]# egrep 'o{2,}' a.txt
loove
looooove
[root@linux-server ~]# egrep 'o{6,7}' a.txt