云计算大数据——shell教程(正则表达式)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述字符串模式的强大工具,它通过一系列预定义的符号和规则,匹配、查找、替换文本中符合特定模式的内容。无论是文本处理、数据提取、表单验证,还是日志分析、代码搜索,正则表达式都能大幅提升效率,是编程、运维、数据分析等领域不可或缺的技能。
一、正则表达式
1.1 定义
正则表达式(Regular Expression, regex/regexp/RE)是一种用来描述字符串模式的规则。
功能:检索、替换、过滤符合特定规则的字符串。
1.2 用途
系统日志筛选(如定位“登录失败”“服务启动失败”)
配置文件解析
文本查找替换
脚本编程中的条件匹配
1.3 Linux 正则表达式分类
1. BRE (基础正则表达式)
传统语法,功能有限
量词 {} 需要转义 {n,m}
- , ? , () 需要转义
常用工具: grep 、 sed
- ERE (扩展正则表达式)
功能更强大,语法简洁
- , ? , () , {} , | 等无需转义
常用工具: egrep ( grep -E )、 awk
1.4 正则表达式组成
1.4.1 普通字符
字母、数字、标点符号等本身。
1.4.2 元字符
. 匹配任意单个字符
匹配任意单个字符(除 \r\n ),就是“通配符”,你想匹配啥都行一个字符
[] 匹配字符集 [a-z] [0-9] [A-Z]
匹配list列表中的一个字符 例: go[ola]d,[abc]、[a-z]、[a-z0-9]
[^list] 匹配非集合中的字符
匹配任意不在list列表中的一个字符 例: [a-z]、[0-9]、[^A-Z0-9]
^ 行首
$ 行尾
\ 转义符
1.4.3 重复次数
扩展
egrep、awk使用{n}、{n, }、{n, m}匹配时“{}"前不用加"\”
egrep -E -n 'wo{2}d' test.txt //-E 用于显示文件中符合条件的字符
egrep -E -n 'wo{2,3}d' test.txt
案列:
+ 作用:重复一个或者一个以上的前一个字符
示例:执行“egrep -n 'wo+d' test.txt”命令,即可查询"wood" "woood" "woooooood"等字符串
? 作用:零个或者一个的前一个字符
示例:执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet”“best”这两个字符串
| 作用:使用或者(or)的方式找出多个字符
示例:执行“egrep -n 'of|is|on' test.txt”命令即可查询"of"或者"if"或者"on"字符串
() 作用:查找“组”字符串
示例:“egrep -n 't(a|e)st' test.txt”。“tast”与“test”因为这两个单词的“t”与“st”是重复的,
所以将“a”与“e”
列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串
()+ 作用:辨别多个重复的组
示例:“egrep -n 'A(xyz)+C' test.txt”。该命令是查询开头的"A"结尾是"C",中间有一个以上
的"xyz"字符串的意思



二、grep —— 条件查找
常用选项
-E :启用扩展正则
-c :统计匹配行数
-i :忽略大小写
-o :只输出匹配内容
-v :反向匹配(不包含的行)
-n :显示行号
–color=auto :高亮匹配
—
grep -c root /etc/passwd # 统计 root 出现的行数 grep -i “the” web.sh #
不区分大小写匹配 grep -v root /etc/passwd # 输出不包含 root 的行 grep -o
‘[0-9]+.[0-9]+.[0-9]+.[0-9]+’ ifconfig.out | head -1 # 提取 IP 地址
ifconfig | grep -o ‘[0-9]+.[0-9]+.[0-9]+.[0-9]+’ | head -1 提取 IP 地址

0-9]+:匹配一个或多个数字(0-9)。
.:匹配一个点号(.),由于点号是正则表达式中的特殊字符,需要用 \ 转义。
整个模式由四组 [0-9]+ 和三组 . 组成,对应 IPv4 地址的四段数字(如 192.168.1.1)。
三、基础正则 vs 扩展正则
3.1 常见的BRE元字符
BRE 常见元字符
^ 行首
$ 行尾
. 任意单字符
[list] 匹配字符集
[^list] 反向匹配
- 0 或多次
{n} 精确次数
{n,} 至少 n 次
{n,m} n~m 次
3.2ERE 新增功能
- 一个或多个
? 0 或 1 次
| 或者(OR)
() 分组
()+ 匹配重复的组
四、扩展正则表达式(ERE)元字符
通常情况下会使用基础正则表达式就已经足够了,但有时为了简化整个指令,需要使用范围更广的扩展正则表达式。
例如,使用基础正则表达式查询除文件中空白行与行首为“#”之外的行(通常用于查看生效的配置文件),执行grep -v ‘^KaTeX parse error: Expected group after '^' at position 23: …txt | grep -v ‘^̲#’即可实现。这里需要使用管道…|^#’ test.txt,其中,单引号内的管道符号表示或者(or)。
4.1 查找特定字符
grep -n 'the' test.txt # 查找 the
grep -vn 'the' test.txt # 反向匹配
4.2中括号集合
grep -n 'sh[io]rt' test.txt # shirt 或 short
grep -n '[^w]oo' test.txt # 前面不是 w 的 oo
4.3定位符
grep -n '^the' test.txt # 行首是 the
grep -n '\.$' test.txt # 行尾是 .
grep -n '^$' test.txt # 空行

4.4 点与星
grep -n 'w..d' test.txt # w 开头 d 结尾,中间两个字符
grep -n 'woo*d' test.txt # w 开头 d 结尾,中间 o 可有可无
grep -n 'w.*d' test.txt # w 开头 d 结尾,中间任意字符
执行以下命令即可查询任意数字所在行。
grep -n '[0-9][0-9]*' test.txt

4.5 次数限定符
#查询两个 o 的字符。
grep -n 'o\{2\}' test.txt # oo
#查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串
grep -n 'wo\{2,5\}d' test.txt # w 开头 d 结尾,2-5 个 o
#查询以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 的字符串。
grep -n 'wo\{2,\}d' test.txt # 至少两个 o >=2
正则表达式是一种用来描述字符串模式的规则。功能:检索、替换、过滤符合特定规则的字符串。
元字符
通过上面几个简单的示例,可以了解到常见的基础正则表达式的元字符主要包括以下几个
^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配“^”
字符本身,请使用“^”
$ 匹配输入字符串的结尾位置。如果设置了RegExp 对象的 Multiline 属性,则“KaTeX parse error: Undefined control sequence: \n at position 6: ”也匹配‘\̲n̲’或‘\r’。 要匹配“”字符本身,请使用“$”
. 匹配除“\r\n”之外的任何单个字符
\ 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义
“” 匹配前面的子表达式零次或多次。要匹配“”字符,请使用“*”
[] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”
[^] 赋值字符集合。匹配未包含的一个任意字符。例如,“[^abc]”可以匹配“plin”中任何一个字母
[n1-n2] 字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意
一个小写字母字符。
总结
正则表达式是一把 “双刃剑”:用得好可以大幅提升文本处理效率,用得不好则可能导致模式匹配不准确或性能低下。因此,在实际应用中,需根据具体需求选择合适的模式,必要时结合其他文本处理工具(如 awk、sed、Python 字符串方法)协同工作。
更多推荐
所有评论(0)