一、正则表达式的作用
1、正则表达式是什么,有什么作用。
Global search REgular expression and Print out the line.
正则表达式:正则表达式引擎
正则表达式:
是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能,
文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。
二、基本使用方法
基本正则表达式:grep
扩展正则表达式: egrep, grep -E
fgrep: fast, 不支持使用正则表达式
语法格式:
grep [option]... 'PATTERN' FILE... --color=auto 命令选项: -v: 反向选取 -o: 仅显示匹配的字串,而非字串所在的行 -i: ignore-case,忽略字符大小写 -E: 支持使用扩展正则表达式 -A #匹配内容的之后#行信息 -B #匹配内容的之前#行信息(第一个匹配项就是第一行) -C #匹配内容的前后各#行信息
1、基本正则表达式和扩展字符表达式元字符匹配的区别表
基本正则表达式的元字符: 字符匹配
次数匹配元字符:用于实现指定其前面的字符所能够出现的次数不包含特殊字符的连续字符组成的串叫单词
正则次数匹配元字符 | 涵意 | 扩展正则次数匹配元字符 | 涵意 |
* | 任意长度,它前面的字符可以出现任意次 | * | 任意长度,它前面的字符可以出现任意次 |
\? | 0次或1次 | ? | 0次或1次 |
\{m\} | m次 | {m} | m次 |
\{m,n\} | 至少m 次,至多n次 | {m,n} | 至少m 次,至多n次 |
\{m,\} | 至少m次 | {m,0} | 至少m次 |
\{0,n\} | 至多n次 | {0,n} | 至多n次 |
.* | 任意长度的任意字符 | + | 至少1次 |
2、字符匹配表
字符匹配 | 涵意 |
. | 匹配任意单个字符 |
[ ] | 匹配指定范围内的任意单个字符 |
[[:alpha:]] | 大小写字母 |
[[:alnum:]] | 数子大小写字母 |
[[:digit:]] | 数字 |
[^] | 取反 |
3、位置锚定
字符 | 涵意 |
^ | 行首锚定写在模式最右侧 |
$ | 行尾锚定写在模式最右侧 |
^$ | 空白行 |
\< | 词首,出现于单词左侧,\b\<char |
\> | 词尾,出现于单词左侧,\b\<char |
4、分组
分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用
\(\)
例如:\(ab\)*
引用:
例如\(ab\(x\)y\).*\(mn\)
有编号:自左而后的左括号,以及与其匹配右括号
\(a\(b\(c\)\)mn\(x\)\).*\1
例如:
\(ab\?c\).*\1
abcmnaaa
abcmnabc
abcmnac
acxyac
四、实验操作
练习grep的基本使用
1、查看所有用户的进程并把httpd的进程显示出来
2、查找/proc/meminfo中以大小写字母开头的行
3、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
4、显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户;
5、找出/etc/passwd文件中的一位数或两位数
6、显示/boot/grub/grub.conf中以至少一个空白字符开头的行
7、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
8、找出netstat -tan命令执行结果中以'LISTEN'结尾的行;
9、显示当前系统上root、fedora或user1用户的默认shell
10、找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行;
11、使用echo命令输出一个路径,而后使用grep取出其基名;
12、找出ifconfig命令结果中的1-255之间的数字;
五、结论
grep和egrep是很常见也很常用的命令,它最重要的功能就是进行字符串数据的比较,然后将符合用户需求的字符串显示出来,由于vi、grep、awk、sed等工具都支持正则表达式,对于文本中的字符串的处理相当的方便,所以学好正则表达式对于linux中的文本操作就方便多了。