grep及正则表达式详解
grep及正则表达式 一、grep 1、grep定义 GloballysearchaRegularExpressionandPrint 全局搜索(匹配正则表达式的)并打印
扩展命令: egrep:扩展grep,相当于grep-E命令,使用扩展正则匹配。 fgrep:fastgrep,不支持正则匹配的grep,只能匹配字符本来的意义。
grep与egrep的区别是egrep支持更多扩展的正则
2、grep参数(#代表数字) -v:显示不匹配的行 -i:忽略字母大小写 -o:只打印匹配的字符 -E:扩展正则表达式 -A#:显示匹配的行以及匹配行后的#行 -B#:显示匹配的行以及匹配行前的#行 -C#:显示匹配的行以及匹配行前后的各#行 --color:定义匹配字符的颜色
颜色标记匹配的字符配置: aliasgrep='grep--color=auto' aliasegrep='egrep--color=auto'
永久生效修改文件/etc/bashrc添加上面两行内容 3、各个参数举例: 二、正则表达式
1、字符匹配 .:匹配一个字符 []:匹配范围内任意单个字符 [^]:匹配范围外任意单个字符 例: 原始文件 .:匹配任意一个字符 []:匹配a,b两个字符 [^]:匹配除了a,b,c三个以外的任意字符 扩展: [0-9][[:digit:]]匹配数字 [a-z][[:lower:]]匹配小写字母 [A-Z][[:upper:]]匹配大写字母 [[:space:]]匹配所有空白字符(空格,制表符,新行) [0-9a-zA-Z][[:alnum:]]匹配字母及数字 [a-zA-Z][[:alpha:]]匹配字母 [[:punct:]]标点符号
2、次数匹配 *:任意次数 .*:任意长度的任意字符 ?:0次或1次 +:1次或多次 {m}:m次 {m,n}:至少m次,至多n次 {0,n}:至多n次 {m,}:至少m次 例: *:匹配l任意次数 .*:匹配h开头的任意行 ?:匹配el字符,l可以是0次或1次 +:匹配el,l最少1个 {m}:匹配ell字符 {m,n}:匹配el,l最少1次,最多2次 {0,n}:匹配el,l最多2次, {m,}:匹配el,l最少1次 3、定位匹配 ^:匹配行首 $:匹配行尾 &;,b:匹配单词词首 &;,b:匹配单词词尾 例: ^:匹配以h开头的行 $:匹配以d结尾的行 &;:匹配以h开头的单词 &;:匹配以o结尾的单词 &;&;:匹配单词hello 4、分组和引用 ():小括号内的为一组 1,2,……引用分组,1为第一个小括号内容,2为第二个小括号内容…… 例:匹配以4个字符开头并且与开头相同4个字符结尾的行 5、元字符总结: 正则表达式及grep 字符匹配:.[][^] 次数匹配:*+?{} 定位匹配:^$&;&; 分组和后向引用:()1,2……
扩展正则表达式及egrep 字符匹配:.[][^] 次数匹配:*+?{} 定位匹配:^$&;&; 分组和后向引用:()1,2…… 或者:a|b 扩展正则表达式举例(为省事和上面的例子顺序相同,只截了3个图) |:匹配w或W的行 三、作业
1、显示/etc/passwd文件中以bash结尾的行 2、显示/etc/passwd文件中的两位数或三位数 3、显示`netstat-tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行 4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行 5、显示当前系统上root、centos或者user1用户的默认shell和UID(请事先创建这些用户,若不存在) 6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行 7、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其完整路径和目录名 目录名: #echo/etc/rc.d/init.d/functions|grep-o'/.*/'|grep-o'&;[a-zA-Z.]+&;/$'|grep-o'[a-zA-Z.]+' 8、找出ifconfig命令执行结果中1-255之间的数字
#ifconfig|egrep'&;[1-9]&;|&;[1-9][0-9]&;|&;1[0-9][0-9]&;|&;2[0-4][0-9]&;|&;25[0-5]&;' 合并相同的[]为[]{},合并后简写结果 #ifconfig|egrep'&;[1-9]&;|&;[1-9][0-9]&;|&;1[0-9]{2}&;|&;2[0-4][0-9]&;|&;25[0-5]&;' 省略多余的&;&;,合并简写结果 #ifconfig|egrep'&;([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])&;' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |