Linux 正则表达式

环境准备

复制代码
 [lyk@controller ~ 15:21:03]$ mkdir lab
 [lyk@controller ~ 15:21:08]$ cd lab
 [lyk@controller lab 15:21:11]$ vim words
 cat
 category
 acat
 concatenate
 dog
 ​
 ​

普通字符

复制代码
 [lyk@controller lab 15:21:36]$ cat words |grep 'cat'
 cat
 category
 acat
 concatenate

字符集[...]

匹配 [...] 中的任意一个字符。

复制代码
 [lyk@controller lab 15:22:07]$ echo cbt >> words 
 [lyk@controller lab 15:22:57]$ echo c1t >> words
 [lyk@controller lab 15:23:02]$ cat words | grep 'c[ab]t'
 cat
 category
 acat
 concatenate
 cbt
[a-z] [A-Z] [0-9]
  • [a-z],匹配所有小写字母。

  • [A-Z],匹配所有大写字母。

  • [0-9],匹配所有数字。

复制代码
 [lyk@controller lab 15:23:11]$ cat words | grep 'c[a-z]t'
 cat
 category
 acat
 concatenate
 cbt
 ​
 [lyk@controller lab 15:23:38]$ echo cCt >> words 
 [lyk@controller lab 15:23:52]$ cat words | grep 'c[A-Z]t'
 cCt
 ​
 [lyk@controller lab 15:23:58]$ cat words | grep 'c[0-9]t'
 c1t
 [lyk@controller lab 15:24:12]$ cat words | grep 'c[a-z0-9]t'
 cat
 category
 acat
 concatenate
 cbt
 c1t
 [lyk@controller lab 15:24:17]$ cat words | grep 'c[a-zA-Z0-9]t'
 cat
 category
 acat
 concatenate
 cbt
 c1t
 cCt
 ​
 ​
 # 要想匹配-符号,将改符号写在第一个位置
 [lyk@controller lab 15:24:27]$ echo c-t >> words 
 [lyk@controller lab 15:25:02]$ cat words | grep 'c[-a-zA-Z0-9]t'
 cat
 category
 acat
 concatenate
 cbt
 c1t
 cCt
 c-t

匹配除了 [...] 中字符的所有字符。

复制代码
 [lyk@controller lab 15:25:07]$ cat words | grep 'c[^ab]t'
 c1t
 cCt
 c-t
 ​
 ​
 # ^放中间会被当做普通字符
 [lyk@controller lab 15:25:41]$ cat words | grep 'c[a^b]t'
 cat
 category
 acat
 concatenate
 cbt
 ​

. 匹配除换行符(\n\r)之外的任何单个字符,相等于\[^\n\r]

复制代码
 [lyk@controller lab 15:26:03]$ cat words | grep 'c.t'
 cat
 category
 acat
 concatenate
 cbt
 c1t
 cCt
 c-t
 ​

\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。

复制代码
 [lyk@controller lab 15:26:35]$ echo c.t >> words 
 [lyk@controller lab 15:27:05]$ cat words | grep 'c\.t'
 c.t
 ​
 # 匹配普通字符,虽然可以匹配,但强烈建议不要在前面加\
 [lyk@controller lab 15:27:09]$ cat words | grep 'c\at'
 cat
 category
 acat
 concatenate
 ​

| 符号是扩展 表达式中元字符,指明两项之间的一个选择。要匹配 |,请使用 \|

复制代码
 # 使用egrep或者grep -E 匹配
 [lyk@controller lab 15:27:23]$ cat words | egrep 'cat|dog'
 cat
 category
 acat
 concatenate
 dog
 #或者
 [lyk@controller lab 15:27:57]$ cat words | grep -E 'cat|dog'
 cat
 category
 acat
 concatenate
 dog
 ​

非打印字符

终端中不显示的字符,例如换行符。

字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c\cL
\n 匹配一个换行符。等价于 \x0a\cJ
\r 匹配一个回车符。等价于 \x0d\cM
\s 匹配任何空白字符 ,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S 匹配任何非空白字符 。等价于 [^ \f\n\r\t\v]
\w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\W 匹配任何非单词字符。等价于[^A-Za-z0-9_]
\t 匹配一个制表符。等价于 \x09\cI
\v 匹配一个垂直制表符。等价于 \x0b\cK

grep 命令支持\w\W\s\S

定位符^ 匹配行首位置

复制代码
[lyk@controller lab 15:28:07]$ cat words | grep '^cat'
cat
category

$匹配行末位置

复制代码
[lyk@controller lab 15:29:33]$ cat words | grep 'cat$'
cat
acat
[lyk@controller lab 15:29:58]$ cat words | grep '^cat$'
cat

#查看/etc/profile文件中有效行
[lyk@controller lab 15:35:10]$ cat /etc/profile | egrep -v '^#|^$'

#-v取反,不显示匹配内容

#查看 /etc/ansible/ansible.cfg有哪些section
[lyk@controller lab 15:41:34]$ cat /etc/ansible/ansible.cfg | egrep '^\['
[defaults]
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

#查看/var/log/message Aug 19 14:01 到 Aug 19 14:09 日志

\b 匹配一个单词边界

复制代码
[lyk@controller lab 15:30:02]$ echo hello cat >> words 
[lyk@controller lab 15:30:26]$ cat words | grep '\bcat'
cat
category
hello cat
[lyk@controller lab 15:30:31]$ cat words | grep 'cat\b'
cat
acat
hello cat
[lyk@controller lab 15:30:37]$ cat words | grep '\bcat\b'
cat
hello cat

\B 非单词边界匹配

复制代码
[lyk@controller lab 15:30:41]$ cat words | grep '\Bcat'
acat
concatenate
\< 和 \>
  • \< ,匹配一个单词左边界

  • \>,匹配一个单词右边界

复制代码
[lyk@controller lab 15:31:05]$ cat words | grep '\<cat'
cat
category
hello cat
[lyk@controller lab 15:31:27]$ cat words | grep 'cat\>'
cat
acat
hello cat

限定次数*

匹配前面的子表达式任意次数

复制代码
[lyk@controller lab 15:31:32]$ echo dg >> words 
[lyk@controller lab 15:32:02]$ echo doog >> words 
[lyk@controller lab 15:32:06]$ cat words | grep 'do*g'
dog
dg
doog

+ 是扩展表达式元字符,匹配前面的子表达式一次以上次数

复制代码
[lyk@controller lab 15:32:10]$ cat words | egrep 'do+g'
dog
doog

? 是扩展表达式元字符,匹配前面的子表达式一次以下次数

复制代码
[lyk@controller lab 15:32:38]$ cat words | egrep 'do?g'
dog
dg

{} 是扩展表达式元字符,用于匹配特定次数。例如:{n},配置n次

复制代码
[lyk@controller lab 15:33:03]$ cat words | egrep 'do{2}g'
doog

{m,n},是扩展表达式元字符,用于匹配次数介于m-n之间

复制代码
[lyk@controller lab 15:33:24]$  echo dooog >> words
[lyk@controller lab 15:33:41]$ echo doooog >> words 
[lyk@controller lab 15:33:45]$ cat words | egrep 'do{2,3}g'
doog
dooog

{m,},是扩展表达式元字符,匹配前面的子表达式m次以上次数

复制代码
[lyk@controller lab 15:33:49]$ cat words | egrep 'do{2,}g'
doog
dooog
doooog

{,n},是扩展表达式元字符,匹配前面的子表达式n次以下次数

复制代码
[lyk@controller lab 15:34:11]$ cat words | egrep 'do{,3}g'
dog
dg
doog
dooog

() 标记一个子表达式

复制代码
[lyk@controller lab 15:34:33]$ echo dogdog >> words 
[lyk@controller lab 15:34:52]$ echo dogdogdog >> words 
[lyk@controller lab 15:34:56]$ echo dogdogdogdog >> words 
[lyk@controller lab 15:35:00]$ cat words | egrep '(dog){2,3}'
dogdog
dogdogdog
dogdogdogdog
[lyk@controller lab 15:35:05]$ cat words | egrep '(dog){2,}'
dogdog
dogdogdog
dogdogdogdog
相关推荐
路溪非溪14 分钟前
关于Linux内核中头文件问题相关总结
linux
木易双人青20 分钟前
01-Docker-简介、安装与使用
运维·docker·容器
专注API从业者2 小时前
Python + 淘宝 API 开发:自动化采集商品数据的完整流程
大数据·运维·前端·数据挖掘·自动化
Fireworkitte4 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil9004 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char4 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
中科米堆6 小时前
中科米堆CASAIM自动化三维测量设备测量汽车壳体直径尺寸
运维·自动化·汽车·视觉检测
淮北也生橘126 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
缘华工业智维6 小时前
CNN 在故障诊断中的应用:原理、案例与优势
大数据·运维·cnn