1:什么是正则表达式?
正则表达式是通过一些特殊的符号辅助,可以让用户轻易达到处理字符串的目的。里面的字符不代表其字面意义,而是用于额外的功能描述,我们称此类字符为“元字符”。
2:正则表达式可以作用在那些方面?
正则表达式可以在文本处理方面起到查找,删除,替换等重要作用,可以提高文本处理的效率,对于一个系统管理员是多么的重要。
3:正则表达式种类?
基本正则表达式grep;扩展正则表达式额grep或grep -E;快速正则表达式fgrep.
4:正则表达式是通过一些特殊的符号辅助来进行文本处理的,这些文本文件我们称为“元字符”。下面介绍一基本正则表达式“元字符”种类。
1)字符匹配类
. :匹配任意一个单个字符。
[ ]:匹配指定范围内的任意字符
[^]:匹配指定范围内以外的任意字符(取反)
[0-9],[[:digit:]]:任意数字
[a-z],[[:lower:]]:任意小写字母
[A-Z],[[:upper:]]:任意大写字母
[[:punct:]]:任意符号
[[:alnum:]]:数字和字母
[[:alpha:]]:任意大小写字母
[[:space:]]:任意空字符
2)次数匹配类
* :任意长度他前面的字符可以出现任意次
.*:任意长度的任意字符
\?:他前面的字符可以出现0次或1次。
\{m,n\}:前面的字符至少出现m次至多出现n次
\{m,\}:前面的字符至少出现m次
\{0,n\}:前面的字符至多出现n次
3)字符锚定类
^ : 行首锚定
$ : 行尾锚定
\<或\b: 词首锚定
\>或\b: 词尾锚定
4) 分组
\(ab \(c\)de\)
对应括号为一组,自左至右的左括号与之对应的右括号,上面abcde为对应的1号括号内的内容,c为对应的2号括号内的内容。
5:正则表达式的用法?
语法格式:grep [option]....'PATTERN' file....
命令选项: -v 反向选取
【例1】 显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户
-o 仅显示匹配到的子串而非子串所在行
【例2】 显示/etc/passwd文件中显示root的子串
-i 忽略匹配到的字符大小写
【例3】 显示/proc/meminfo文件中以大写或小写S开头的行
文本搜索条件里是小s搜索结果出现了大S,说明搜索时忽略了大小写。
-n 显示所匹配的内容在文件的第几行
【例4】题目如上要显示出满足条件的行号
6: 对于正则表达式的一些练习。
1)显示/etc/passwd文件中其默认shell为/bin/bash的用户;并显示上述结果中其ID号最大的用户
2)找出/etc/passwd文件中的一位数或两位数
3)显示/boot/grub/grub.conf中以至少一个空白字符开头的行
4)显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行
你懂的:
1)grep "/bin/bash$" /etc/passwd |sort -t: -k3 -n|cut -d: -f1|tail -1
2)grep "\b[[:digit:]]\{1,2\}\b" /etc/passwd
3)grep "^[[:space:]]\{1,\}.*" /boot/grub/grub.conf
4)grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit
7:扩展正则表达式
扩展正则表达式在用法上和基本正则表达式大致相同,在“元字符”写法上有些区别,下面介绍下有区别的扩展正则表达式的”元字符“,其他的同上扩展正则表达式。
1)字符类:同上
2)次数匹配类
* :任意长度他前面的字符可以出现任意次
.*:任意长度的任意字符
?:他前面的字符可以出现0次或1次。
{m,n}:前面的字符至少出现m次至多出现n次
{m, }:前面的字符至少出现m次
{0,n}:前面的字符至多出现n次
{m}:精确匹配m次
3)锚定类:同上
4)分组类:同上
5)或者类
a|b : a或者b
abc|Cba: “|”线两边各为一个整体,意思是:abc或者Cba.
ab(c|C)ba: “|”意思是abcba或者abCba.
8:对于扩展正则表达式的一些练习
1)显示当前系统上root、fedora或user1用户的默认shell;
2)找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行
3)使用echo命令输出一个路径,而后使用grep取出其基名
1)egrep "root|fedora|user1" /etc/passwd | cut -d: -f7
2)egrep -o "\b[[:alpha:]]+\b\(\)" /etc/rc.d/init.d/functions
notice
正则表达式匹配内容的次数是用大括号括起来的。\{n,m\}
正则表达式“元字符”与“通配符”的区别