Linux-正则表达式

Linux正则表达式

正则表达式(RegularExpression)在Linux系统中广泛应用于文本处理工具如grep,sed,awk等。Linux主要支持两种正则表达式风格:基本正则表达式(BRE)和扩展正则表达式(ERE)。

1.基本正则表达式

使用grep时用 -E,如grep -E "NATASHA|root" /etc/passwd

1.1元字符

|-----------------|----------------------|--------|---|---|
| 元字符 | 解释 || 示例 ||
| . | 匹配任意单个字符(除换行符) || j..k(匹配j两个字符k) ||
| ^ | 匹配行首 || ^s(匹配以s开头) ||
| | 匹配行尾 || a(匹配以a结尾) ||
| * | 前导符出现0次或多次 || go*(匹配g,go,goo,gooo等) ||
| + | 前导符出现1次或多次 || go*(匹配go,goo,gooo等) ||
| ? | 前导符出现0次或一次 || go*(匹配g,go) ||
| \[\] | 字符集合;匹配方括号中任意一个字符 || abc(匹配ac或bc) ||
| - | 匹配指定范围内的一个字符 || 0-3(匹配0,1,2,3中一个) ||
| \^ | 否定字符集合;匹配不在组内的字符 || \^0-3(不匹配0,1,2,3中一个) ||
| \ | 转义字符;无意义变有意义,有意义变无意义 || \.(将.无意义) ||
| \d 数字字符0-9 | \w 等同于a-zA-Z0-9 | \s 空格 | \b 单词边界 ||
| \< | 词首定位符 || \<jack\>(就匹配jack) \<Jjck\>(匹配Jcak或jack) ||
| \> | 词尾定位符 || \<jack\>(就匹配jack) \<Jjck\>(匹配Jcak或jack) ||
| \(\) | 匹配后的标签 || IP=10.8.11.32(替换32为33) :%s/\(10.\)\(8.\)\(11.\)\(32\)/\1\2\3\33/ ||
| | | 或 || "a|b"a或b ||
| x{m} | 字符x重复m次 || o{5}o重复5次 ||
| x{m,} | 字符x重复至少m次 || o{5}o重复至少5次 ||
| x{m,n} | 字符x重复m到n次 || o{5,7}o重复5到7次 ||
[正则-元字符]

|--------------------|------------|----------|
| 工具/命令 | 默认正则类型 | 启用ERR的选项 |
| grep | BRE(基本元字符) | -E |
| sed | BRE(基本元字符) | -r |
| awk | ERE(拓展元字符) | 默认 |
| bash \[ =\~ ] | ERE(拓展元字符) | 默认 |
[Linux工具中的正则表达式差异]

1.1.1元字符.

复制代码
echo -e "cat\ncuorp\napple\nmany\nmum\ngire" | grep -E "c.t"
-e:作用在于使\n换行符起效果
-E:作用在于使正则起效果

1.1.2元字符^

复制代码
echo -e "cat\ncuorp\napple\nmany\nmum\ngire" | grep -E "^a"

1.1.3元字符$

复制代码
echo -e "cat\ncuorp\napple\nmany\nmum\ngire" | grep -E "e$"

1.1.4元字符*与+与?

复制代码
echo -e "cat\ncuorp\napple\nappppple\nale\nmany\nmum\ngire" | grep -E "ap*le"
复制代码
echo -e "Aio\ncat\ncuorp\nBin\napple\nZip\nappppple\nale\nmany\nmum\ngire" | grep -E "ap+"
复制代码
echo -e "Aio\ncat\ncuorp\nBin\napple\nZip\nappppple\nale\nmany\nmum\ngire" | grep -E "ap?le"

1.1.5元字符\[\]

复制代码
echo -e "cat\ncuorp\napple\nappppple\nale\nmany\nmum\ngire" | grep -E "[iou]"

1.1.6元字符-

复制代码
echo -e "Aio\ncat\ncuorp\nBin\napple\nZip\nappppple\nale\nmany\nmum\ngire" | grep -E "[A-Z]"

1.1.7元字符\^

复制代码
echo -e "Aio\ncat\ncuorp\nBin\napple\nZip\nappppple\nale\nmany\nmum\ngire" | grep -E "[^a-p]"

1.1.8元字符\

复制代码
echo -e "example.com\nhello world\ntest.txt\nabc123" | grep -E "\.

1.1.9元字符\<\>

复制代码
echo -e "Aio\ncat\ncuorp\nBin\napple\nZip\nappppple\nale\nmany\nmum\ngire" | grep -E "\<apple\>"

1.1.10元字符 \(\)

复制代码
:%s/\(192.\)\(168.\)\(189.\)\(133\)/\1\2\3134/  

1.1.11元字符x{m}与x{m,}与x{m,n}

复制代码
echo -e "Aio\ncat\ncuorp\nBin\napple\nZip\nappppple\nale\nmany\nmum\ngire" | grep -E "p{3}"

echo -e "Aio\ncat\ncuorp\nBin\napple\nZip\nappppple\nale\nmany\nmum\ngire" | grep -E "p{2,5}"

echo -e "Aio\ncat\ncuorp\nBin\napple\nZip\nappppple\nale\nmany\nmum\ngire" | grep -E "p{1,}"
相关推荐
zx_7414848123 分钟前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS35 分钟前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿1 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
wdfk_prog2 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞2 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
百万蹄蹄向前冲2 小时前
密码都对Node.js却连不上Linux数据库
linux·mysql
彧azz2 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
日常筹谋记3 小时前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯
susplus3 小时前
【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动
linux·arm·makefile·imx6ull
Shadow(⊙o⊙)3 小时前
Linux进阶知识1.0
linux·运维·服务器