1. 扩展正则表达式
扩展正则表达式使用范围更广,可简化整个命令操作
范例:
去除空白行与行首为#的行
[dmtsai@study ~] grep -v '^$' regular_express.txt | grep -v '^#'
#grep : 全面搜索正则表达式,并将其打印出来
#[-v] : 显示不包含匹配文本的所有行
简化为:
[dmtsai@study ~] egrep -v '^$|^#' regular_express.txt
egrep命令作用是在文件内查找指定的字符串
egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法
egrep用法:
[dmtsai@study ~] egrep [参数] [文件]
-i : 搜索时,忽略大小写
-c : 只输出匹配行的数量
-l : 只列出符合匹配的文件名,不列出具体的匹配行
-n : 列出所有的匹配行,显示行号
-h : 查询多文件时不显示文件名
-s : 不显示不存在、没有匹配文本的错误信息
-v : 显示不包含匹配文本的所有行
-w : 匹配整词
-x : 匹配整行
-r : 递归搜索
-q : 禁止输出任何结果,已退出状态表示搜索是否成功
-b : 打印匹配行距文件头部的偏移量,以字节为单位
-o : 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
扩展正则表达式的特殊符号
RE字符 | 意义 |
---|---|
+ | 重复【1个或1个以上】的前一个RE字符 |
范例:
查找god、good、goood等的字符串。那个o+代表【1个以上的o】
[dmtsai@study ~] egrep -n 'go+d' regular_express.txt
# egrep : 在文件内查找指定的字符串
# [-n] : 列出所有的匹配行,显示行号
RE字符 | 意义 |
---|---|
? | 【0个或1个】的前一个RE字符 |
范例:
查找gd、god这两个字符串,那个o?代表【空的或1个o】
[dmtsai@study ~] egrep -n 'go?d' regular_express.txt
# egrep : 在文件内查找指定的字符串
# [-n] : 列出所有的匹配行,显示行号
RE字符 | 意义 |
---|---|
| | 用【或】的方式找出数个字符串 |
范例:
查找gd、god这两个字符串,单引号内的管道意义为【或or】
[dmtsai@study ~] egrep -n 'gd|good' regular_express.txt
# egrep : 在文件内查找指定的字符串
# [-n] : 列出所有的匹配行,显示行号
查找gd、god、dog这三个字符串,单引号内的管道意义为【或or】
[dmtsai@study ~] egrep -n 'gd|good|dog' regular_express.txt
# egrep : 在文件内查找指定的字符串
# [-n] : 列出所有的匹配行,显示行号
RE字符 | 意义 |
---|---|
( ) | 找出【群组】字符串 |
范例:
查找glad或good这两个字符串,因为g与d是重复的,可将la与oo列于( )中,并以 | 分隔开
[dmtsai@study ~] egrep -n 'g(la|oo)d' regular_express.txt
# egrep : 在文件内查找指定的字符串
# [-n] : 列出所有的匹配行,显示行号
RE字符 | 意义 |
---|---|
( )+ | 多个重复群组的判别 |
范例:
将【AxyzxyzxyzxyzC】用echo打印,找开头是A结尾是C,中间有1个以上"xyz"字符串
[dmtsai@study ~] echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'
# echo : 在终端设备上输出字符串或变量提取后的值
# egrep : 在文件内查找指定的字符串
特别强调:! 在正则表达式中并不是特殊字符
范例:
查出文件中含有 !与 > 的行
[dmtsai@study ~] grep -n '[!>]' regular_express.txt
# grep : 全面搜索正则表达式,并将其打印出来
# [-n] : 列出所有的匹配行,显示行号