为处理文本、字符串而定义的一套规则和方法
包括:普通字符和特殊字符
[root@fedora ~]# grep charlie /etc/passwd charlie:x:1001:1001::/home/charlie:/bin/bash
匹配所有包含字母h的行
[root@fedora ~]# grep h /etc/passwd root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
^ 匹配行首
[root@fedora ~]# grep ^h /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt
$ 匹配行尾
[root@fedora ~]# grep h$ /etc/passwd root:x:0:0:root:/root:/bin/bash chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash charlie:x:1001:1001::/home/charlie:/bin/bash
^$ 匹配空行
[root@fedora ~]# grep ^$ test.sh [root@fedora ~]#
\< 匹配以字母h开头的词
[root@fedora ~]# grep "\<h" /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin flatpak:x:986:983:User for flatpak system helper:/:/sbin/nologin chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash charlie:x:1001:1001::/home/charlie:/bin/bash
\> 匹配以字母h结尾的词
[root@fedora ~]# grep "h\>" /etc/passwd root:x:0:0:root:/root:/bin/bash saslauth:x:992:76:Saslauthd user:/run/saslauthd:/sbin/nologin chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash charlie:x:1001:1001::/home/charlie:/bin/bash
\< \> 完整匹配单词bash
[root@fedora ~]# grep "\<bash\>" /etc/passwd root:x:0:0:root:/root:/bin/bash chrlie:x:1000:1000:chrlie brown:/home/chrlie:/bin/bash charlie:x:1001:1001::/home/charlie:/bin/bash
. 点:匹配任意一个字符(换行符除外)
[root@fedora ~]# grep ".TF" anaconda-ks.cfg lang zh_CN.UTF-8
[root@fedora ~]# echo "a123 b1234 c12" | grep "12." a123 b1234 c12 # 此处不匹配c12,因为"12."中"."要求至少要有一个字符
[……] 方括号:匹配该括号字符集中的某一个字符
[a-z] # 匹配所有小写字母 [A-Z] # 匹配所有大写字母 [a-zA-Z] # 匹配所有字母 [0-9] # 匹配所有数字 # 方括号里 ^ 表示 非或排除 的意思 [^a-z] # 匹配除了小写字母以外的所有字符 [Yy][Ee][Ss] # 匹配所有yes(不区分大小写)
* 星号:匹配她前面字符的任意多次,包括0次
[root@fedora ~]# echo "z zo zoo" | grep zo* z zo zoo
\ 反斜线:转义某一个特殊含义的字符,将其解释为字面含义
1.使用 \$ ,将 $ 解释为美元符号 2.使用 \\ ,表示字符 \ 3.grep "^[A-Z].*\$" file # 从file中匹配以大写字母开头、以"."结尾的任意字符
grep 如何 支持拓展正则表达式?
1. grep 采用 -E ,--extended-regexp 选项,将模式解释为拓展正则表达式(ERE)
2. grep 的模式中采用转义符
3. 使用 egrep 代替 grep
* 星号:匹配它前面字符的0次或无限次(>=0)
+ 加号:匹配它前面字符的1次或无限次(>=1)
?问号:匹配它前面字符的1次或0次(=1或=0)
{ } 大括号中加上一个或两个数字,指定它前面匹配的重复的次数
有些应用程序需要进行转义,否则大括号仅仅表示字面含义
{m} 匹配前一个字符m次
{m,n} 匹配前一个字符m次至n次。
m和n可以省略:
1.若省略m,则匹配0至n次
2.若省略n,则匹配无限次
| 管道符:用于匹配一组可选字符中的任意一个
# 从文件GPL中匹配GPL或General Public Licenses grep -E "GPL|General Public Licenses" GPL grep "GPL\|General Public Licenses" GPL egrep "GPL|General Public Licenses" GPL
( ) 圆括号:将一组正则表达式括起来,构建子表达式
子表达式的用途
作为一个整体,进行逻辑划分
(GPL|General) Public Licenses # 匹配GPL Public Licenses 或 General Public Licenses (abc){2} # 匹配 abcabc a(123|456)b # 匹配 a123c 或 a456c
通过子表达式的编号,进行反向引用
在圆括号中的子表达式将匹配内容存储到一个临时缓冲区(寄存器)中
按照从左到右出现的顺序存储
编号从数字1开始,最多可存储9(或99)个捕获的子表达式
使用\n访问每个缓冲区,其中n是表示特定的缓冲区十进制数