正则表达式:由一类特殊字符以及文本字符所编写的一种模式,处理文本当中的内容。
其中的一些字符不表示字符的字面含义,表示控制或者通配的功能。
通配符:用于匹配文件名和目录名。不能匹配文件内容。
正则表达式:既可以匹配命令结果,又可以匹配文本内容。
常用的通配符:
*表示匹配任意一个或者多个字符
?表示匹配任意一个字符。(只能匹配单个)
[ ] 匹配范围内的任意单个字符
[root@localhost test]# touch 1.txt 2.txt 3.txt 456.txt
[root@localhost test]# ls *.txt
1.txt 2.txt 3.txt 456.txt
[root@localhost test]# ls ?.txt
1.txt 2.txt 3.txt
[root@localhost test]# ls [1-6].txt
1.txt 2.txt 3.txt
正则表达式:有两种
1.基本正则表达式
2.扩展正则表达式
(1和2区别仅限与写法上的区别,其他的无任何差别)
基本正则:
字符匹配,又叫做元字符
“.” 表示匹配任意的单个字符,可以是一个汉字
\表示转义符,此时"."就表示一个点,不是字符也不是汉字。
()括号表示分组的意思,当()此时就表示一个括号。
[ ] 匹配指定范围内的任意单个字符([0-9] [A-Z])
举例:范围内匹配
[root@localhost test]# ls | grep "[0-9]"
1.txt
2.txt
3.txt
456.txt
举例:同时匹配大小写字母和数字
[root@localhost test]# ls | grep "[A-Z0-9a-z]"
1.txt
2.txt
3.txt
456.txt
a.txt
A.txt
{a-z}.txt
b.txt
B.txt
c.txt
C.txt
d.txt
D.txt
e.txt
E.txt
f.txt
F.txt
z.txt
[^]取反,指定范围之外的。
举例:匹配除了A-Z 0-9 . 之外的(红色部分表示正则匹配到的内容)
ls | grep "[^A-Z0-9.]"
图:
[[:space:]] 包含空格,tab键也算,换行的空格,回车的空格
[[:blank:]] 表示空白字符(空格和tab键(制表符))
练习:以rc开头,任意的单个字符,0-6的数字
[root@localhost test]# ls /etc/ | grep "rc[.0-6]"
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
只匹配以rc.为开头的文件,.不是正则
[root@localhost test]# ls /etc/ | grep "rc\."
rc.d
rc.local
通配符不能完全匹配到大小写,正则表达式则可以真正匹配到大小写。
例题:匹配不是a或者z的任何字符:
[root@localhost test]# ls | grep "[^a.z].txt"
[A..Z].txt
b.txt
c.txt
d.txt
e.txt
f.txt
g.txt
h.txt
i.txt
j.txt
k.txt
l.txt
m.txt
n.txt
o.txt
p.txt
q.txt
r.txt
s.txt
test.txt
t.txt
u.txt
v.txt
w.txt
x.txt
y.txt
正则表达式中表示次数的表达式:
*表示匹配前面的字符任意次,0次也行,无数次也行,有多少匹配多少,没有也行。也就是所谓的贪婪模式。
.* 表示匹配任意长度的字段,至少有一次,不包括0次
\? 匹配前面的字符0次或者1次。可有可无。
\+ 匹配前面的字符至少1次,最多可以无数次
\{n\} n表示数字。表示匹配前面的字符=n次(正好等于才可以匹配==>精确匹配)
\{m,n\}匹配前面的字符,最少m次,最多n次
\{,n\}匹配前面的字符,最多n次。(只要前面的字符存在都算,不需要连续出现)
\{n,\}匹配前面的字符,最少n次。
位置锚定:
^:以什么为开头,在模式的左侧
^root:表示以root为开头
$:以什么为结尾,在模式的右侧
r$:表示以r结尾
^root$:用于匹配整行,而且一整行只能有一个“root”,多一个不行少一个也不行
^$:匹配空行,只能是空行
词首锚定:<或者\b
词尾锚定:>或者\b
以\b的位置来判定词首和词尾
<root>匹配整个单词
分组:
\( \)
|:表示逻辑或
扩展正则:去掉前面的
grep -E
练习:
1、显示/etc/passwd中以sh结尾的行;
cat /etc/passwd | grep "sh$"
2、查找/etc/inittab中含有“以s开头,并以d结尾的单词”模式的行;
cat /etc/inittab | egrep "\bs[a-z]*d\b 或者cat /etc/inittab | grep -E "\bs[a-z]*d\b"
3、查找ifconfig命令结果中的1-255之间的整数;
ifconfig| egrep -o "\b[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]\b"
4、显示/var/log/secure文件中包含“Failed”或“FAILED”的行;
cat /var/log/se+cure | grep -E "failed|FAILED"
5、在/etc/passwd中取出默认shell为bash的行;
cat /etc/passwd | grep "bash"
6、高亮显示passwd文件中冒号,及其两侧的字符
cat /etc/passwd | grep -E ".?:*:.?"
591

被折叠的 条评论
为什么被折叠?



