内容目录(原文见公众号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和高可用最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
欢迎赞赏哦!有您的支持,小麦粒一定会越来越好!