linux常用正则命令 linux shell 正则表达式

Linux grep、egrep使用命令详解grepegrep区别
grep默认不支持扩展 但可以通过-E 选择来支持扩展正则
egrep 支持扩展正则
关于正则与扩展正则的区别可以看我另一篇shell 正则的介绍
文件处理顺序 以行为单位,逐行进行处理
默认只输出与表达式相匹配的文本行
基本用法
- 格式1:egrep [选择] '正则表达式' 文件
- 格式2:前置命令 | egrep [选择] '正则表达式'
? egrep命令工具 (扩展正则命令)
? 常用命令选项
?grep 正则表达式,用来查找过滤文档的工具符号
grep "root" user//在user文档中查找有单词root的行
grep "^root"user//在user文档中查找以单词root开头的行
grep "bash"user//查找空行
grep "^ "user//查找以空格开头的行
grep "[rot]"user//查找字母r或者o或者t
grep "roo[tn]" user//查找root或者roon
grep "[^rot]"user//查找字母r或者o或者t之外的内容
grep "[a-z]"user//查找小写字母
grep "[A-Z]"user//查找大写字母
grep "[a-Z]"user//查找所有字母
grep "[0-9]"user//查找数字
grep "r..t" user//查找以r开头t结尾中间有2个任意字符的单词
grep "r. " user//查找以r开头后面任意字符相当手通配符
grep "ro*" user//查找以r开头后面有或没有字母o的单词,o可以出现任意次
grep"o{1,2}"user//查找o出现1次到2次的行
grep"o{2,3}"user//查找o出现2次到3次的行
grep"o{2}"user//查找o出现2次的行
grep "o{1,} "user//查找o出现1次以及1次以上
grep"(:0){2}"user//查找:0(数字零)连续出现2次的行
扩展正则
egrep"o+"user//查找o出现1次以及1次以上
egrep"o?"user//查找o出现0次或1次
egrep"o{1,2}"user//查找o出现1次到2次的行
egrep"o{2,3}"user//查找o出现2次到3次的行
egrep"o{2}"user//查找o出现2次的行
egrep"o{1,}"user//查找o出现1次以及1次以上
egrep"(:0){2}"user//查找:0(数字零)连续出现2次的行
egrep"bash|nologin"user//查找bash或者nologin
egrep"\bthe\b"a//查找单词the,前后是空格或者特殊符号
案例:
正则表达式匹配练习
1)典型的应用场合:grep、egrep检索文本行
grep命令不带-E选项时,支持基本正则匹配模式 。比如“word”关键词检索、“^word”匹配以word开头的行、“word$”匹配以word结尾的行……等等 。
输出以“r”开头的用户记录:
输出以“localhost”结尾的行:
若希望在grep检索式同时组合多个条件,比如输出以“root”或者以“daemon”开头的行:
而若若使用grep -E或egrep命令,可支持扩展正则匹配模式,能够自动识别 |、{} 等扩展正则表达式中的特殊字符,用起来更加方便 , 比如:
或者
使用grep -E 与 使用egrep命令完全等效 , 推荐使用后者,特别是涉及到复杂的正则表达式的时候 。
2)grep、egrep命令的-q选项
选项 -q 表示 quiet(静默)的意思,结合此选项可以只做检索而并不输出,通常在脚本内用来识别查找的目标是否存在,通过返回状态 $? 来判断,这样可以忽略无关的文本信息,简化脚本输出 。
比如 , 检查/etc/hosts文件内是否存在192.168.4.4的映射记录,如果存在则显示“YES”,否则输出“NO” , 一般会执行:
这样grep的输出信息和脚本判断后的提示混杂在一起,用户不易辨别,所以可以改成以下操作:
是不是清爽多了 , 从上述结果也可以看到,使用 -q 选项的效果与使用/dev/null的效果类似 。
3)基本元字符 ^、$ —— 匹配行首、行尾
输出注释的配置行(以#开头的行):
统计本地用户中登录Shell为“/sbin/nologin”的用户个数:

推荐阅读