!!!----本文的所有实验均是在centos 6.6平台上实现的----!!!
正则表达式
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。——维基百科
一、正则表达式
1、grep 文本搜索工具 :根据用户指定的模式,对目标文件进行过滤,显示被模式匹配到的行
grep [选项] 模式 文件名
-o 仅显示匹配到的内容,不会把正行输出
-v 反向选取,把没有匹配到的行显示出来
--color 高亮显示所匹配的内容
-i ignore case 不区分字符大小写
-E extended-regexp 使用扩展的正则表达式
-A #:After的意思,显示匹配字符串后 # 行的数据
-B #:before的意思,显示匹配字符串前 # 行的数据
-C # 显示匹配字符串前后 # 行的数据
模式(正则表达式)
正则表达式:由一类字符书写的模式,其中有一些字符不表示字符字面的意义,而是表示通配功能
①基本正则表达式(grep)
·元字符:
. 匹配任意单个字符
[] 匹配指定集合内的任意单个字符
[0-9] [[:digit:]] 数字集合
[a-z] [[:lower:]] 小写字母集合
[A-Z] [[:upper:]] 大写字母集合
[a-zA-Z] [[:alpha:]] 大小写字母
[0-9a-zA-Z] [[:alnum:]] 数字和大小写字母集合
[[:space:]] 空白字符集合
[^] 匹配的是集合外的任意单个字符
·匹配次数:用于对其前面紧邻的字符所能出现的次数作出限定
* 匹配其前面的字符任意次
[[email protected] tmp]# cat test
xy xxy xxxy y aby [[email protected] tmp]# grep 'x*y' test xy xxy xxxy y aby
\? 匹配其前面字符0此或一次
[[email protected] tmp]# grep --color 'x\?y' test xy xxy xxxy y aby
\+ 匹配其前面字符至少出现一次
[[email protected] tmp]# grep --color 'x\+y' test xy xxy xxxy
\{m\} 匹配其前面字符m此
[[email protected] tmp]# grep --color 'x\{2\}y' test xxy xxxy
\{m,n\}:匹配其前面的字符至少出现m次,至多出现n次
[[email protected] tmp]# grep --color 'x\{1,3\}y' test xy xxy xxxy
·位置锚定:
^:行首锚定:写在模式的最左侧
$:行尾锚定:写在模式的最右侧
^$ :表示空白行
·单词锚定:由非特殊字符组成的连续的字符串
\< 词首锚定 也可用\b
\> 词尾锚定 也可以用\b
分组\(\)
如'\([0-9]\) \([a-z]\) \1 \2'
注:\1,\2...\n:用于表示引用前面分组的内容
\| 选择字符
2、egrep [选项] ‘模式’ 文件名
扩展正则表达式
·元字符
. 匹配任意单个字符
[] 匹配指定集合内的任意单个字符
[0-9] [[:digit:]] 数字集合
[a-z] [[:lower:]] 小写字母集合
[A-Z] [[:upper:]] 大写字母集合
[a-zA-Z] [[:alpha:]] 大小写字母
[0-9a-zA-Z] [[:alnum:]] 数字和大小写字母集合
[[:space:]] 空白字符集合
[^] 匹配的是集合外的任意单个字符
·匹配次数:用于对其前面紧邻的字符所能出现的次数作出限定
* 匹配其前面的字符任意次
? 匹配其前面字符0此或一次
+ 匹配其前面字符至少出现一次
{m} 匹配其前面字符m此
{m,n}:匹配其前面的字符至少出现m次,至多出现n次
·位置锚定
^:行首锚定:写在模式的最左侧
$:行尾锚定:写在模式的最右侧
^$ :表示空白行
·单词锚定
\< 词首锚定
\> 词尾锚定
\<单词\>
分组()如:'([0-9]) ([a-z]) \1 \2'
| 选择字符
二、实例练习正则表达式
1、显示/proc/meminfo文件中以大写或小写S开头的行;
2、显示/etc/passwd文件中其默认shell为/sbin/nologin的用户;
3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户;
4、找出/etc/passwd文件中的一位数或两位数;
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
7、找出netstat -tan命令执行结果中以'LISTEN'(后可有空白字符)结尾的行;
8、添加用户bash, testbash, basher, nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户;
9、扩展题:新建一个文本文件aa,假设有如下内容:
He like his lover.
He love his lover.
He like his liker.
He love his liker.
找出其中最后一个单词是由此前某单词加r构成的行。
练习10:显示当前系统上root、centos或user1用户的默认shell及用户名;
练习11:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行;
练习12:使用echo输出一个路径,而使用egrep取出其基名;
小知识:
[[email protected] tmp]# dirname /etc/passwd #路径名的获取方式 /etc [[email protected] tmp]# basename /etc/passwd #基名的获取方式 passwd
练习13:找出ifconfig命令结果中的1-255之间的数值;
练习14:找出ifconfig命令结果中的IP地址;ip地址范围:1.0.0.1 - 223.255.255.254
多动手练习才会有更多的收获哦!
转载于:https://blog.51cto.com/meaningful/1631687