Welcome 微信登录

首页 / 操作系统 / Linux / grep,egrep 及正则表达式

Linux中一切皆文件:文本文件,对文本文件的搜索就非常的关键和常用。Linux文本搜索工具:grep ,egrep,fgrep,文本搜索指文本文件中内容的搜索。文件名的搜索是linux中bash的特性,globbing,文件名通配,有点windows中的搜索相似,但功能跟强大。一般配合 ls 命令使用。可参考视频:bash基础特性(01)globbing:中的元字符: *:用来通配任意长度任意字符,?:用来匹配单个字符,[]:用于比配指定范围内的字符,[^]:用于取反范围内的字符。总结:globbing文件名通配:既限定了长度,又限定了可用的字符范围。既然要搜索,必须有过滤条件,这里就要用到正则表达式,他是linux 文本处理工具的非常基础和重要。正则表达式(过滤条件)正则表达式中的元字符,以正常字符组合而成。基本正则表达式:grep扩展正则表达式:egrep ,grep E,                fgrep:fast,不支持使用正则表达式grep : Global search Regular expression and print out the linegrep 命令:    grep  [OPTION] PATTEN [FILE…]       --color =auto       -o :只显示被过滤模式匹配到的内容        -i  :搜索时不区分字符大小写 grep "no"       -v :显示不能被过滤模式匹配到的行这里用到grep的一个参数--color,color有三个值供选择:never、always、auto。always和auto的区别就是,always会在任何情况下都给匹配字段加上颜色标记,当通过管道或重定向时就会多出一些控制字符,结果会变成
export ^[[1;32m^[[KGREP^[[m^[[K_OPTIONS="--color=always"
export ^[[1;32m^[[KGREP^[[m^[[K_COLOR="1;32"
而auto则只在输出到终端时才加上颜色。
可以在.bashrc里加上
export GREP_OPTIONS="--color=auto"
来实现高亮匹配,具体用什么颜色,可以通过
export GREP_COLOR="a;b" #默认是1;31,即高亮的红色
来设置,其中:
a:可以选择:【0,1,4,5,7,8】    b: 可选择:0 关闭所有属性                    30 black                 
1 设置高亮度                     31 red4 下划线                              32 green5 闪烁                                  33 yellow7 反显                                  34 blue8 消隐                                  35 purple                                            36 cyan                                            37 white                                           基本正则表达式元字符:字符匹配:     . :配任意单个字符     []  :配指定范围内的任意单个字符     [^] :匹配指定范围外的任单个字符,相当于[]取反         [0-9],[[:digit :]],[^0-9][^[:digit :]]            [a-z],[[:lower:]]            [A-Z],[[:upper:]]            [[:space:]]  空格符         [[:punct :]] 标点符号         [0-9a-z A-Z],[[:alnum :]]            [a-zA-Z],[[:alpha:]]次数匹配:在期望匹配的字符后面提供一个控制符,用于表达匹配其前面字符指定的次数      *:用于匹配左侧字符任意长度,表示0次,1次或多次        "ab*c"=ac,or,abbc,or abbbc,or abbbbc      .*:任意长度任意字符,默认工作于贪婪模式,   ?:匹配其前的字符,匹配0次或1次,表示其左侧字符可有可无        "ab?c"=ac,或abc      +:匹配前面(左侧)字符1次或多次       "ab+c"=abc,abbc,abbbc      {m}:精确匹配左侧字符m次 。ab{2}c=abbc      {m,n}:至少m次,至多n次。ab{0,3}c=ac,abc,abbc,abbbc      {0,3}:最多3次   {m,}:最少m次锚定位置的字符》匹配位置的限定:      ^:锚定行首。^ab     $:锚定行尾。ab$      "^ab.*ba$":以ab开头中间任意字符以ab结尾      "^$":匹配空白行 , grep "^$" /etc/rc.d | wc l 表示统计空白行数      "^PATTERN$:用于匹配整行。"^a4*$"     单词锚定:由非特殊字符组成的连续的字符串        <:锚定词首,也可  # grep "<ab"/etc       >:锚定词尾,也可  # grep "ab>"/etc       <PATTERN>:匹配PATTERN能匹配到的整个单词     #  ifconfig | grep "<[0-9]{2}>":精确匹配2位数字单词分组:()   分组的小括号中的模式匹配到的内容,会在执行过程中被正则表达式引擎记录下来,并保存内置的变量中;这些变量分别是1, 2, ...1: 从左侧起,第一个左括号,以及与之配对的右括号中间的模式所匹配到的内容; 2以此类推。#"(ab)*c"扩展正则表达式的元字符:字符匹配:同基本正则表达式次数匹配:*: 0次或多次?: 0次或1次;+: 1次以上;{m}: 精确匹配m次;{m,n}: 至少m次,至多n次;锚定:^: 锚定行首$: 锚定行尾<, : 词首锚定;用于表示单词的模式的左侧;>, :词尾锚定;用于表示单词的模式的右侧;分组:同基本正则表达式( )支持或的概念a|b:匹配a或者b练习:1、显示/etc/passwd文件中以bash结尾的行# grep “bash$”/etc/passwd# grep –E “bash$”/etc/passwd# egrep “bash$” /etc/passwd2、显示/etc/passwd文件中的两位数或三位数# grep “<[[:digit:]]{2,3}>”/etc/passwd# egrep “<[0-9]{2,3}>”/etc/passwd3、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行  # netstat –tan | grep “LISTEN[[:space:]]*$”  # netstat –tan | egrep “LISTEN[[:space:]]*$”4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行# grep "^([[:alnum:]]+>).*1$" /etc/passwd# egrep "^([[:alnum:]]+>).*1$" /etc/passwd5、显示当前系统上root、CentOS或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)# grep -E "^(root|centos|user1)>" /etc/passwd |cut -d:-f3,7# egrep  "^(root|centos|user1)>"/etc/passwd |cut -d: -f3,76、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行# egrep -o "<[[[:alnum:]_]+>()"/etc/rc.d/init.d/functions7、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名# echo/etc/sysconfig/network-scripts/ | egrep -o "[[:alnum:]-]+/?$"# echo /etc/sysconfig/network-scripts| egrep -o "(/.*/)"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])>"Linux 基础入门教程----正则表达式基础   http://www.linuxidc.com/Linux/2015-08/121441.htmLinux正则表达式sed 详述  http://www.linuxidc.com/Linux/2015-04/116309.htmLinux正则表达式特性及BRE与ERE的区别 http://www.linuxidc.com/Linux/2014-03/99152.htmgrep使用简明及正则表达式 http://www.linuxidc.com/Linux/2013-08/88534.htm正则表达式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm正则表达式之零宽断言 http://www.linuxidc.com/Linux/2013-03/81897.htmLinux中正则表达式与文件格式化处理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm基础正则表达式 http://www.linuxidc.com/Linux/2014-09/106296.htm常用正则表达式整理 http://www.linuxidc.com/Linux/2014-10/108076.htm本文永久更新链接地址