1.基本元字符
正则表达式 | 描述 | 示例 |
^ |
行起始标志 | ^tux 匹配以tux起始的行 |
$ | 行尾标志 | tux$ 匹配以tux结尾的行 |
. | 匹配任意字符 | hack. 匹hackl和hacki,但是不能匹配hackl2和hackil,它只能匹配单个字符 |
[] | 匹配包含[字符]之中的任意一个字符 | coo[k1]匹配 cook和 cool |
[^] | 匹配除[^字符]之外的任意一个字符 | 9[^01]匹配92,93,但是不匹配91或90 |
[-] | 匹配[]中指定范围内的任意一个字符 | [1-5]匹配从1~5的任意一个数字 |
? |
匹配之前的项 0次或者 1次 | Colou?r 匹配color 或者colour,但是不能匹配colouur |
+ | 匹配之前的项1次或多次 | Rollno-9+ 匹配rollno-99,rollno-9,但是不能匹配rollno- |
* | 匹配之前的项0次或多次 | Co*l 匹配cl,col.coool等 |
() | 创建一个用于匹配的子串 | ma(tri)? 匹配max或maxtrix |
{n} | 匹配之前的项n次 | [0-9]{3}匹配任意一个三位数,[0-9]{3}可以扩展为[0-9][0-9][0-9] |
{n,} | 之前的项至少需要匹配n次 | [0-9]{2,}匹配任意一个两位和更多位的数字 |
{n,m} | 指定之前的项所必须匹配的最小次数和最大次数 | [0-9]{2,5}匹配从两位数到五位数之间的任意一个数字 |
| |
交替–匹配两边的任意一项 | Oct (1st | 2nd ) 匹配 oct 1st 和 2nd |
\ | 转义符可以将上面介绍的特殊字符进行转义 | a.b 匹配a.b,.通过在.之间加上前缀,从而忽略了.的特殊意义 |
^$ | 以空开头,以空结尾 | 过滤空行 |
grep文本过滤命令
- grep 和egrep 的区别:
egrep除了可以使用基本的正则表达外, 还可以用扩展表达式 - 扩展表达式:
+ 匹配一个或者多个先前的字符, 至少一个先前字符.
? 匹配0个或者多个先前字符.
格式:grep [-参数 [搜索内容]]|[[参数]搜索内容] 文件
grep -E = egrep
grep -v # -v 表示反向过滤
grep -c # 统计匹配行数
grep -q # 静默,无任何输出
grep -n # 显示匹配结果所在的行号
-i忽略大小写
^:以搜索内容开头
$:以搜索内容结尾
-v:除了搜索内容
-n :行号
-n2:搜索内容上小两行
-E:相当于egrep,搜索模式扩展成正则表达式,只要搜索的内容有正则表达式就需要加-E;
-A?:后?行
-B?:前?行
.:代表一个字符
*:0到任意次,字符跟在谁后面,谁就是0到任意次
,?:
\?:字符出现[0-1次],表示字符跟在谁后面,谁就是0到1次
-n:显示只处理的行号;
np:显示第n行;
d:删除
a:下一行添加
添加多行\n
i:上一行添加
-n:只显示搜索内容;
/p:对搜索的内容,会全部显示原文件内容和搜索文件内容,所以会出现重复内容;
/^UUID/!d:显示删除的这一行
两行需要添加引号
[root@base1 mnt]# grep '172.25.254.178' /etc/hosts && echo 'YES' || echo 'NO'
172.25.254.178 www.westos.com news.westos.com music.westos.com
YES
[root@base1 mnt]# grep -q '172.25.254.178' /etc/hosts && echo 'YES' || echo 'NO'
YES
[root@base1 mnt]# cp /etc/passwd /mnt
[root@base1 mnt]# egrep -c '/sbin/nologin' passwd # 统计匹配的行数
42
[root@base1 mnt]# grep ^root passwd #