Pattern(模式):文本字符和正则表达式的元字符组合而成匹配条件.
Regular Expression(正则表达式):是一类字符书写出来的模式(Patern).
Metacharacter(元字符):不表示字符本身的意义,在正则表达式中用于额外功能的描述。
1.grep,egrep,fgrep的简介:
grep:( global search regular expression (RE)) and print out the line。grep是一款功能强大的文本搜索工具,根据用户指定的文本模式对目标文件(输入文件:input files或标准输入设备:standard input)进行逐行搜索,显示能够被模式匹配的行。
egrep:egrep的命令只和grep有很小不同,使用扩展的正则表达式构建模式,egrep是grep的扩展相当于grep -e,可以支持更多的RE元字符。
fgrep:fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符 表示回其字符本身的意义,不再特殊功能。
2.grep的工作方式:
grep在一个或多个文件中搜索用户指定的模式。如果模式包括空格,则必须被引用,模式后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。
3.grep的使用格式:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
4.grep的常用选项:
不带任何选项:在目标文件中查找并显示与模式匹配的行。
例: 在/etc/passwd中查找并显示用户名为“root”用户的信息
-n:列出模式中匹配的行以及行号
例:查找并显示在/etc/group中"mandrivia"所在的行和行号
-v:反向匹配显示不能被模式匹配的行
例: 在/etc/passwd中查找并显示除了“root”之外的所有用户的信息 (结果中的一部分)
-o:仅匹配行当中被模式匹配到的字串,而不是整行
例: 在/etc/group中查找"mandrivia",并显示
-i:在搜索的目标文件中不去分大小写字母进行模式匹配
例: 在/var/log/boot.log-20140216查找字母"o"和"O"所在的行
-E:支持扩展的正则表达式
例: 在/etc/rc.d/init.d/network中查找并显示"t"至少出现2次所匹配的行
-A #:支持匹配到的字符串所匹配的行以及下#行(#:表示数字)
例: 在/etc/fstab中查找并显示"/dev/shm "所匹配的行以及下2行
-B #:支持匹配到的字符串所在的行以及上#行(#:表示数字)
例: 在/etc/host.conf 中查找并显示"order "所匹配的行以及上1行
-C #:支持匹配到的字符串所在的行以及上下#行(#:表示数字)
例:在/proc/meminfo查找"MemFree"所在的行以及上一行和下一行
5.正则表达式和扩展正则表达式元字符以及元字符使用:
5.1:标准RE的元字符级grep的使用
5.1.1字符匹配
[[:punct:]]:标点符号
[[:lower:]]:小写字母
[[:upper:]]:大写字母
[[:digit:]]:数字
[[:alnum:]]:数字和大小写字母
[[:alpha:]]:所有大小写字母
[[:space:]]:所有空格字符
5.1.1.1 例:显示"Aa12@"中的字母不区分大小写
显示"A a12@"中的空白字符
.:任意单个字符
5.1.1.2 例:
[]:指定范围内的任单个字符
5.1.1.3 例:
[^]:指定范围外的任意单个字符
5.1.1.4 例:
5.1.2:次数匹配:用来指定匹配其前面的字符的次数
*:匹配其前的字符任意次
5.1.2.1例:
\?:匹配其前的字符0次或1次
5.1.2.2例:
贪婪模式:尽可能多的匹配所搜索的字符串
.*:匹配任意长度的任意字符
5.1.2.3例:
\{m\}:匹配其前的字符m次
\{m,n\}:匹配其前的字符m次到n次
\{m\, }:匹配其前的字符至少m次
\{ ,n\}:匹配其前的字符至多n次
5.1.2.4例:"o"出现2次
5.1.2.5例:"o"至少出现3次
5.1.3:位置锚定
^:用于锚定行首的字符
5.1.3.1例:查找并显示以"z"开头的用户的所有信息
$:用于锚定行尾的字符
5.1.3.2例:显示以"n"为行尾的所有用户组的信息
$^:锚定空白行
5.1.3.3例:
\<词(\b词):锚定词首
5.1.3.4例:显示用户名为zhou的所有信息:
\>词(词\b):锚定词尾
5.1.3.5例:显示shell为/bin/bash的所有用户
5.4.分组元字符
\(\):括号限定多选结构的范围,标注量词作用的元素,为反向引用”捕获”文本
\1,\2,…:反向引用 匹配之前的第一、第二组括号内的字表达式匹配的文本
使用括号的3个理由:限制多选结构、分组、捕获文本
5.4.1例:显示当前正确的IP且范围为:1.0.0.1--223.255.255.254
5.4.2例:
5.2扩展RE元字符及egrep的使用
5.2.1字符匹配
用法同标准的正则表达式元字符使用相同
例:在/var/log/boot.log-20140216查找字母"o"和"O"所在的行
5.2.2次数匹配
*:匹配其前的字符任意次
?:匹配其前的字符0次或1次
+:匹配其前的字符至少1次
.*:匹配任意长度的任意字符
{m}:匹配其前的字符m次
{m,n}:匹配其前的字符m次到n次
{m, }:匹配其前的字符至少m次
{ ,n}:匹配其前的字符至多n次
例:查找以r开头后面至少有一个o的用户所在的行
5.2.3位置锚定
^:锚定行首
$:锚定行尾
\<词(\b词):锚定词首
\>词(词\b):锚定词尾
5.2.4分组
():括号限定多选结构的范围,标注量词作用的元素,为反向引用”捕获”文本
|:逻辑或操作符
例:显示当前正确的IP且范围为:1.0.0.1 - 223.255.255.254