正则表达式:Regular Expression REGEXP
由一类特殊字符及文本字符所编写的模式,表示控制或通配的功能
两类:
基本正则表达式BRE:
扩展正则表达式ERE:
*** grep GLoble search Regular exression and Print out the line
文本过滤(一定模式pattern)2
-v 反向匹配 显示未匹配到的行
-E 支持扩展正则表达式 egrep
-i 忽略字符大小写
-o 仅显示匹配到的字符本身 而不是整行
-q --quiet 静默模式,不输出任何信息 可用echo $?查看命令执行情况
-A :after 显示匹配行及其前n行
B :before 匹配行及其后n行
C :context 匹配行及其前后n行
1.基本正则表达式元字符:
. 任意 单个字符
* 前面字符 任意次 可以不出现 0 - ∞
.* 任意长度 任意字符
\? 其前面字符 0次或一次 可有可无
\+ 其前面字符 1次或多次
\{m,n\} 其前面字符m至n次
\{m\} 指定出现m次 \{,n\} 至多n次
[] 指定范围内任意单个字符
[^] 指定范围外的任意单个字符
数字 [:digit:],小写字母[:lower:],大写字母[:upper:],字母[:alpha:],
字母数字[:alnum:],标点[:punct:],空格[:space:]
使用时还需再加[] [[:digit:]] 任意单个数字
2.位置锚定: 指定字符出现位置
^ 行首锚定,整个模式最左侧
$ 行尾锚定,整个模式最右侧
^pattern$ 用patt匹配整行
^$ 空白行 不可包含空格 ^[[:space:]]*$ 空白行或包含任意空格的行
\<或\b 词首锚定
\>或\b 词尾锚定
\<pattern\>匹配完整单词
3.分组及引用:
\(\) 括号内的字符作为一组 \(xy\)\+ 一个或多个xy 括号可嵌套不可交叉
可用\1 \2 \3 …引用对应分组
*** 扩展正则表达式: 区别grep 部分元字符不用加"\" 增加或 |
egrep =>grep -E
1.扩展正则表达式的元字符:
.
[]
[^]
2.次数匹配: 不用加转义字符 "\"
*
?
+
{m}
{m,n}
3.位置锚定:
^
$
\<,\b
\>,\b
4.分组及引用:
()
后向引用:\1 \2 \3 ...
5.或:
a|b a或者b z|Zjj z或Zjj (z|Z)jj zjj或Zjj
例 匹配1到255
egrep -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>'
例 passwd 用户名与shell相同的行
egrep "^([^:]+\>).*\1$" /etc/passwd
例 简单 过滤出ip地址 不严谨
egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
不支持正则表达式元字符:
fgrep: fast grep
用不到元字符时 fgrep更快