【153】基本正则表达式(grep)和拓展正则表达式(egrep)

内容目录(原文见公众号python宝)

一、基本正则表达式grep二、拓展正则表达式(egrep)      三、例举9种用法

一、基本正则表达式grep

        正则表达式根据元字符的数量及功能不同又分为基本正则表达式(grep)拓展正则表达式(egrep)。而grep和egrep同属于文本搜索工具,可根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。用法上grep –E等同于egrep,与grep和egrep相似的文本搜索工具还有fgrep,因不支持使用正则表达式,所以不再单独介绍。

1.字符匹配:

    .:任意单个字符

    [ ]:匹配指定范围内的任意单个字符

    [0-9]:匹配单个数字

    [a-z]:匹配单个小写字母

[A-Z]:匹配单个大写字母

[[:digit:]]:匹配单个数字

[[:lower:]]:匹配单个小写字母

[[:upper:]]:匹配单个大写字母

[[:space:]]:匹配单个空白字符

[[:punct:]]:匹配单个标点符号

[[:alnum:]]:匹配单个字母或数字

[[:alpha:]]:匹配单个字母(不分大小写)

[^]:匹配范围外的任意单个字符

 

  2.次数匹配:

*:任意次(前面字符出现任意次)

\?:0次或1次(前面字符可有可无)

\{m\}:m次(前面字符出现m次)

\{m,n\}:至少m次,至多n次

\{m,\}:至少m次

\{0,n\}:至多n次

.*:任意长度的任意字符

 

  3.位置锚定:

^:行首锚定(写在模式最左侧)

$:行尾锚定(写在模式最右侧)

^$:空白行

\<,/b:词首锚定(出现于单词左侧)

\>,/b:词尾锚定(出现于单词右侧)

(注:不包含特殊字符的连续字符组成的串叫单词)

 

  4.分组

:如abab*

(分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用)

 

  5.引用

\n:引用前面的第n个左括号以及与之对应的右括号中的模式所匹配到的内容

二、拓展正则表达式(egrep)

拓展正则表达式(egrep)

    语法格式:egrep [option] 'PATTERN' FILE...

 

拓展正则表达式元字符:

1.字符匹配:

 .:任意单个字符

 [ ]:匹配范围内的任意单个字符

 [^]:匹配范围外的任意单个字符

 

2.次数匹配:

*:任意次

?:0或1次

+:至少1次

{m}:m次

{m,n}:至少m次,至多n次

{m,}:至少m次

{0,n}:至多n次

 

3.位置锚定:

^:行首锚定

$:行尾锚定

\<,\b:词首锚定

\>,\b:词尾锚定

^,[[:space:]]∗,[[:space:]]∗:空白行

 

4.分组:

( ):分组

12347|:或 

 

5.引用:

    \n:引用前面的第n个左括号以及与之对应的右括号中的模式所匹配到的内容

三、用法

grep及egrep命令选项


-v:反向选取

-o:仅显示匹配的字串,而非字串所在的行

-i:ignore-case,忽略字符大小写

-A:显示之后两行

-B:显示之前两行

-C:显示上下两行

3.1 显示/python/p.sh文件中以大写或小写S开头的行
grep -i '^' ./python/p.sh

3.2 显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户
grep -v '/sbin/bash$' /etc/passwd |cut -d: -f1

3.3 显示默认shell为/bin/bash的用户中ID号最大的用户
grep -v '/sbin/bash$' /etc/passwd |sort -t : -k3 -n |tail -1 |cut -d: -f1

3.4 找出/etc/passwd文件中的一位数或两位数
grep '\<[0-9][0-9]\?\>' /etc/passwd

3.5 显示/python/p.sh中至少一个空白字符开头的行
grep '^[[:space:]]\{1,\}' ./python/p.sh

3.6 显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行
grep '^#[[:space:]]\{1,\}[^[:space:]]\{1,\}' ./python/p.sh

3.7 找出netstat -tan命令执行结果中以'LISTEN'结尾的行

netstat -tan|grep 'LISTEN[[:space:]]*$'

3.8 使用echo命令输出一个路径,而后使用grep取出其基名

echo './python/p.sh' |egrep -o '[^/]+/?$'|cut -d/ -f1

3.9 找出ifconfig命令结果中的1-255之间的数字

ifconfig |egrep -o '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9]|25[0-5])\>'

About Me:小麦粒

● 本文作者:小麦粒,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 个人微信号:pythonbao 联系我加微信群

●个人 QQ:87605025

● QQ交流群pythonbao :483766429

● 公众号:python宝 或 DB宝

● 提供OCP、OCM和高可用最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

欢迎赞赏哦!有您的支持,小麦粒一定会越来越好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值