基本正则表达式




格式:grep [options] 'PATTERF' file


--color=auto 匹配到的选项带颜色显示 -q 静默模式,不输出任何信息 -v 匹配反向,显示不能被匹配到的行 -o 仅显示匹配到的选项,并不是显示正行 -i 匹配时忽略大小写 -E 使用扩展的正则表达式 -A NUM 显示匹配到行的后NUM行 -B NUM 显示匹配到行的前NUM行 -C NUM 显示匹配到行的前后各NUM行 -m # 匹配#次后停止 -n 显示匹配的行号 -w 匹配整个单词 -f file 根据模式文件处理 -c 统计匹配的行数 -e 实现多个选项间的逻辑or关系 例如:grep –e ‘cat ’ -e ‘dog’ file



元字符:


. 匹配任意单个字符 [] 匹配范围内的单个字符 [^] 匹配范围外的单个字符 [0-9] [:digit:] 数字 [a-z] [:lower:] 小写字母 [A-Z] [:upper:] 大写字母 [:alpha:] 大小写字母 [:alnum:] 大小写字母及数字 [:space:] 空格 [:punct:] 标点符号



匹配次数:


次数匹配:用来指定匹配其前面的字符的次数 贪婪模式:尽可能的长的去匹配字符: * 例子:x*y xxy xy y 都能匹配 .* 匹配任意长度任意字符 ? 匹配其前字符0次或者1次 \+ 匹配其前字符至少1次 \{m\}:匹配m次 \{m,\n}:至少m次,至多n次 \{m,\}:至少m次 \{0,\n}:至多n次



位置锚定:


用于指定字符出现的位置 ^:锚定行首 ^Char $:锚定行尾 grepchar$ ^$:空白行 单词的位置锚定 <char :锚定词首,\bchar

char> : 锚定词尾,char\b



分组:


\ (\) \(ab\)*xy \|:或者,ac\|bc ac或者bc



引用:


\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式匹配到的内容,意思是说前面出现一次,在\1这也要出现一次



练习:


1、显示/proc/meminfo文件中的以大小写s的开头的行 2、取出默认shell为非bash的用户 3、取出默认shell为bash的且其ID号最大的用户 4、显示/etc/grub2.cfg文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行 5、显示/boot/grub/grub.conf中以至少一个空白字符的行 6、查出/etc/passwd中一位数或两位数 7、找出ifconfig命令结果中的1到255之间的整数 9、添加用户bash和testbash,而后找出当前系统上于其他用户名和默认shell相同的用户 10、找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHEN”结尾的行 11、取出当前系统上所有用户的shell,要求:每种shell中显示一次,且升序排序显示 12、扫描172.18.120.0/24⽹段,显⽰在线的ip地址 [root@Centos7 ~]# nmap -sP 172.18.120.0/24 | grep -B1 'Host is up'| grep for | cut -d" " -f5 172.18.120.7 172.18.120.17 172.18.120.27 172.18.120.254 13.显⽰/root/passwd⽂件中,包含root字串或包含nologin字串的⾏ 14.匹配root整个单词 15.过滤ipconfig命令输出的所有ip地址 16.找出/etc/rc.d/init.d/functions⽂件中⾏⾸为某单词(包括下划线)后⾯跟⼀个⼩括号的⾏ 17.将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前⾯



扩展正则表达式


egrep:使用扩展正则表达式来构建模式,相当于 grep -E

元字符:同正则表达式,位置牟定同正则表达式



字符匹配:


.:任意单个字符 []:指定范围内的任意单个字符 [^]:指定范围外的任意单个字符



次数匹配


*:匹配器前面的字符任意次 ?:匹配器前面的字符0或1次 +:匹配其前面字符至少一次 {m}:匹配其前面字符m次 {m,n}:至少m次,至多n次 {m,}:至少m次 {0,n}:只读n次



分组:


():分组 |:或者,ac|bc ac或者bc