GREP其实 grep 是一段话的缩写:Global search regular expression and printout the line(全面搜索研究正则表达式并显示出来)
作用:grep 命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行。
基本正则表达式
grep -i "^root" file ###以root开头,i(ignore-case):忽略大小写
grep -i "root$" file ###以root结尾
grep "^$" file ###过滤出空行,cat -E file可以发现文件的结尾都有$
grep "root" -r /mnt/ ###显示/mnt/下文件中有root的行
grep -n "root" file ###显示行号
grep -A 1 "root" file ###显示file中root的后一行,A(after)
grep -B 1 "root" file ###显示file中root的前一行,B(before)
grep "[abc]" file ###匹配里面任意一个字符
grep "[^abc]" file ###匹配不包含^后面的一个字符的内容(非a,b,c)
grep "\<abc" file ###abcd会被过滤出来(相当于^abc开头的字符)
grep "abc\>" file ###aabc会被过滤出来(相当于abc$结尾的字符)
grep "\<abc\>" file ###显示出包含abc的内容(abcd:这种就会过滤不出来)
grep "n.m" file ###代表一个字符
grep "n*m" file ###重复0个或多个前面的字符
grep "\babc\b" file ###只要abc
grep [[:alpha:]] file ###匹配单个字母
grep [[:lower:]] file ###匹配单个小写字母
grep [[:upper:]] file ###匹配单个大写字母
grep [[:digit:]] file ###匹配单个数字
grep [[:alnum:]] file ###匹配单个数字或字母
grep [[:punct:]] file ###匹配单个符号
grep [[:space:]] file ###匹配单个空格
扩展正则表达式
egrep -n "a?c" file ###n(number):显示行号?:重复0个或一个字符
egrep "a+c" file ###+:重复前面一个或一个以上的前面字符
egrep "a{n,m}" file ###重复前一个字符n-m次
grep "a\{n,\}" file ###重复前一个字符至少n次(n-无穷)未加-E及扩展正则则要加\转义,sed -r也不用转义
egrep "a{n}" file ###重复前面一个字符n次
egrep "a{,m}" file ###重复前面最多m次
egrep "a(b|c)" file ###匹配ab及ac的行,():分组过滤
perl正则
\d 匹配一个数字的字符,和 [0-9] 语法一样
\d+ 匹配多个数字字符串,和 [0-9]+ 语法一样(+表示多个)
\D 非数字,其他同 \d
\D+ 非数字,其他同 \d+
\w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
\w+ 和 [a-zA-Z0-9]+ 语法一样
\W 非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
\W+ 和 [^a-zA-Z0-9]+ 语法一样
\s 空格,和 [\n\t\r\f] 语法一样
\s+ 和 [\n\t\r\f]+ 一样
\S 非空格,和 [^\n\t\r\f] 语法一样
\S+ 和 [^\n\t\r\f]+ 语法一样
\b 匹配以英文字母,数字为边界的字符串
\B 匹配不以英文字母,数值为边界的字符串
过滤出IP地址
ifconfig eth0| grep -E '\<inet\>'|cut -d " " -f 10
ifconfig eth0|grep -o "inet [0-9.]*"|grep -o "[0-9.]*" ###o:only-matching(只匹配)
ifconfig eth0|grep -Po '(?<=inet )\S+' ###perl正则取出inet 后面的一串字符以空格分隔符
ifconfig eth0 |grep '\<inet\>' |awk -F " " '{print $2}'