设为首页 收藏本站
查看: 757|回复: 2

[经验分享] Linux基础之正则表达式grep,egrep

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-7-15 09:15:27 | 显示全部楼层 |阅读模式

一、概念


   正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

   给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

   1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);

   2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式的特点是:

   1. 灵活性、逻辑性和功能性非常的强;

   2. 可以迅速地用极简单的方式达到字符串的复杂控制。

   3. 对于刚接触的人来说,比较晦涩难懂。

二、分类


  • grep 基本正则表达式
  • egrep 扩展正则表达式
  • fgrep 不支持正则表达式元字符,搜索字符串的速度快;

三、基本正则表达式grep


基本正则表达式grep: Galobal search Reagular Expression and Printing

1、命令格式



[Shell] 纯文本查看 复制代码
1
grep [options](选项) "pattern"(模式) /path/to/file (文件)
2、命令选项



[Shell] 纯文本查看 复制代码
-i查找内容时忽略大小写(Ignore Case)
-v反转查找(in Vert)
--color=auto:结果匹配内容带颜色显示,默认为红色
    export GREP_COLOR='01;36' 颜色可自己更改
-v:反向选取,只显示不符合模式的行;
-o:只显示配模式匹配的字符串,而不是整个行;
-i:不区分字符大小写
-A #:显示匹配到行时,顺带显示其后面的#个行;
-B #:前面的#行;
-C #:前后的#行;
-E:调用扩展正则表达式;
    grep -E =egrep

3、元字符

   元字符:*,?,不表示字符本身的意义,而是用于额外功能性的描述;







[Shell] 纯文本查看 复制代码
^:锚定行首的符合条件的内容,用法格式"^pattern";
$:锚定行尾的符合条件的内容,用法格式"pattern$";
    ^pattern$
    ^$:空白行
        grep "^$" /etc/rc.d/rc.sysinit |wc -l  查找空白行并统计行数
.:匹配任意单个字符;
*:匹配紧挨在其前面的字符的字符任意次;
    a*b,ab,aab,acb,b
    .*:匹配任意长度的任意字符
        grep "r.*h" /etc/passwd
        grep "^r.*$" /etc/passwd
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
            [a-z],[A-Z],[0-9]
            [:lower:] a-z
            [:upper:] A-Z
            [:digit:] 0-9
            [:alpha:] a-z,A-Z
            [:alnum:] a-z,A-Z,0-9
            [:space:] 空白字符
            [:pundt:] 标点符号
            grep "r[0-9].*h" /etc/passwd
\?:匹配紧挨在其前面的字符0次或1次;
    a\?b:ab,acb,aab,b
    ^a\?b$:
\{m,n}:匹配其前面的字符至少m次,至多n次
    \{0,n}:至多n次,0-n次;
    \{m,\}:至少m次
    \{m,\}:精确匹配m次
        a\{1,3}b:
        grep "[bB].\{2,5\}[tT]":Boot,B123T,bsd12T
\< 锚定词首,用法格式:\<pattern
    \b: \bpattern
\> 锚定词尾,用法格式:pattern\>
    \b: pattern\b
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
\(\):分组,用法格式
    \(ab\)\{1,3\}: ab,aab,abb,abab,ababab
\(a.b\).*\1:前匹配后引用
四、扩展正则表达式egrep=grep -E



[Shell] 纯文本查看 复制代码
.:任意单个字符
[]:指定范围内的单个字符
[^]:指定范围外的单个字符
*:其前面的字符任意次
+:匹配其前面的字符至少1次
?:匹配0次到1次
{m,n}
():分组,支持引用\1,\2;
a|b:a或者b;二选一
    grep "(c|C)at" /etc/test.txt
\<:锚定词首
\>:锚定词尾
^:行首锚定
$:行尾锚定

五、应用实例:

1、显示/etc/passwd以ro开头的行;

145216695.jpg

2、显示/etc/passwd,以nologin结尾的行

152255202.jpg

3、显示/etc/passwd,以r开头以h结尾的行

155736812.jpg

显示/etc/rc.d/rc.sysinit文件中的空白行并统计行数

160121453.jpg

4、取出默认shell为bash,且其用户ID号最小的用户的用户名

164807149.jpg

5、显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同

165600375.jpg

6、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行

173510287.jpg

7、显示/var/log/secure.1文件中记录的属于当前系统时间的前一天的信息中包含“Failed password”或“FAILED LOGIN”的行;而后统计相关的行数

173731674.jpg


8、匹配IP地址有两种方式

180000888.jpg






[Shell] 纯文本查看 复制代码
[iyunv@lyd ~]# ifconfig | grep -o -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"
172.16.251.65
127.0.0.1

180122883.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-7461-1-1.html 上篇帖子: Redhat 6.2 Linux修改yum源免费使用CentOS源 下篇帖子: Centos6.3下rsync+sersync安装配置笔记 表达式 Linux

尚未签到

发表于 2013-9-27 00:29:29 | 显示全部楼层
沙发!沙发!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2014-1-6 07:49:40 | 显示全部楼层
原因为自己可以狠坚强,可是我终究败给了现实。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表