一、正则表达式
一个系统的使用,不仅仅只是软件的安装调试和维护,同时也是对与现有环境的优化和改革,我们在linux的使用过程中总是会遇到很多对于参数的描述,有时我们需要的是参数本身所给出的答案,有时我们仅仅需要的只是参数的最终状态结果。
是一些特殊或不很特殊的字符串模式的集合。通过一些元字符,来表示一些通配的意义,这可以简单的称之为正则表达式。
正则表达式:REGular EXPression, 简写为:REGEXP
元字符:
.:匹配任意单个字符
匹配字符次数(工作在贪婪模式下,尽可能的去匹配):
*:匹配其前面的字符任意次
a, b, ab, aab, acb, adb, amnb
a*b
.*:匹配任意长度的任意字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]
\?:匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{1,\} 至少一次
\{0,3\} 至多三次
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符后面的任意内容必须出现在行尾
^$: 空白行
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词尾部出现
\<root\>: 精确匹配root
分组:
\(\)
\(ab\)* ab可以出现0次1次任意次
后向引用
\1: 第一个左括号以及与之对应的右括号所包括的所有内容
\2: 第二个左括号以及与之对应的右括号所包括的所有内容
\3: 第三个左括号以及与之对应的右括号所包括的所有内容
扩展的正则表达式:
字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
次数匹配:
*:
?:匹配其前面的字符0次或一次
+:匹配其前面的字符至少一次
{m,n}:匹配至少m次至多n次
位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首
$: 锚定行尾,此字符后面的任意内容必须出现在行尾
^$: 空白行
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b: 锚定词尾,其前面的任意字符必须作为单词尾部出现
\<root\>: 精确匹配root
分组:
(): 分组
\1, \2, \3, …
或者
|:or (a|abc a或者abc)
二、grep、egrep、fgrep
grep:根据模式,搜索文本,并将符合模式的文本行显示出来。
Pattern: 文本字符和正则表达式的元字符组合而成匹配条件
grep: 使用基本正则表达式定义的模式来过滤文本的命令:
-i 忽略大小写
–color 将匹配的字符加颜色显示
-v 只显示没有被匹配到的行
-o 只显示被模式匹配到的字符串
-E 支持扩展正则表达式
-A n : 被匹配到之后同时还显示后面的n行
-B n :被匹配到之后同时还显示前面的n行
-C n :被匹配到之后同时还显示前面后面的n行
grep -E=egrep
fgreo:快速搜索,不支持正则表达式
例如:(#为[root@localhost`]#)
1、搜索特定的字符 # grep ‘root’ /var/log/secure
将/var/log/secure这个文件中有root的那一行显示出来
2、反向选择 #grep –v ‘root’ /etc/passwd
3、锚定行首 #grep ‘^root’ /etc.passwd
显示出以root开头的行
4、 限定连续重复字段范围 #grep ‘‘o\(2\)’’ /etc/passwd
找到两个o的字符串
5、 显示/etc/inittan中以#开头,并且后面跟一个或多个空白字符,而后又跟了非空白字符的行 grep ‘^#[[:space:]]\{1,\}[^[:space:]]’ /etc/inittab
6、 匹配默认shell为/sbin/nologin用户列表
grep ‘nologin$’ /etc/passwd | cut –d: -f1