基本正则表达式grep的用法
grep[options]PATTERN[FILE...]
就是我们只要指定选项、指定模式、指定文件即可
如:grep'root'/etc/passwd显示结果如下
下面是grep所支持的常用选项
-i:忽略大小写
--color:给符合条件的加上颜色
-v:显示没有被模式匹配的行
-o:只显示被模式匹配的字符串
-E:使用扩展正则表达式
-A+#:显示其匹配的行和匹配行的后#行
-B+#:显示匹配的行和匹配行的前#行
-C+#:显示匹配的行和匹配行的前后各#行
正则表达式的元字符
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
如:grep[^0-9]etc/passwd意思就是除了0到9这些数字不被匹配,其他的都是匹配对象
字符集合:
[:digit:]:数字[:lower:]:小写字母
[:upper:]:大写字母[:punct:]:标点符号
[:space:]:空白字符[:alpha:]:大小写字母
[:alnum:]数字和大小写字母
匹配次数:
首先我们建个文档test.txt里面的内容为(a,b,ab,aab,acb,adb,amnb)
*:匹配其前面的字符任意次
如:grep'a*b'test.txt则被匹配的是(b,ab,aab)
.*:任意长度的任意字符
如:grep'a.*b'test.txt则被匹配的是(ab,aab,acb,adb,amnb)
\?:匹配其前面的的字符1次或0次
如:grep'a\?b'test.txt则被匹配的是(b,ab)
\{m,n\}:匹配其前面的字符至少m次,至多n次
如:grep'a\{1,2\}b'test.txt则被匹配的是(ab,aab)
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
如:grep'^root'etc/passwd意思就是:只要是root开头的行就是所匹配的行
$:锚定行尾,此字符前面的任意内容必须出现在行尾
如:grep'bash$'etc/passwd意思就是:只要是bash结尾的行就是所匹配的行
^$:空白行grep'^$'/etc/inittab/etc/inittab中的空白行就会被匹配
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词的尾部出现
书写格式:grep"\<root"/etc/passwd
grep"root\>"/etc/passwd
分组:
\(\)
如:ab*其意思是a后面的b可以出现0次1次或任意次
如分组\(ab\)*则表示ab为一个整体可以出现0次1次或任意次
后向引用
建个文档test.txt内容为(Helovehislover.
Shelikeherliker.
Helikehislover.)
命令及命令结果如图所示:
扩展正则表达式(egrep)
egrep=grep-E
字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
次数匹配:
*:匹配其前面的字符任意次
?:匹配其前面的的字符1次或0次
+:匹配其前面的字符至少1次
{m,n}:不需要反斜杠(\)
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
\<:锚定词首,其后面的任意字符必须作为单词首部出现
\>:锚定词尾,其前面的任意字符必须作为单词的尾部出现
分组:
():分组
\1,\2,\3,...
或者
|:or
如:egrep'C|cat'/test.txt其意思是说在test.txt中查找C或cat