linux 脚本 正则表达式

正则表达式

分类

基础正则表达式:BRE

扩展正则表达式:ERE

编程语言支持的高级正则表达式

BRE 和 ERE的语法基本一致,只有部分元字符(预定义好的带有特殊含义的一些符号)需要特殊对待

grep sed 默认使用的基本正则表达式,grep -E,sed -r,egrep,awk使用扩展正则表达式

基本正则表达式

匹配字符

abc:匹配字符串"abc",普通字符的匹配

[abcde...]:匹配括号内的任意单个字符

a[xyz]:匹配ax ay az

a[xyz]b:匹配axb ayb azb

\n:匹配换行符

\t:匹配制表符

\w:匹配单词字符 [a-zA-Z0-9]

\W:匹配非单词字符 [^a-zA-Z0-9]

\s:匹配空白字符

\S:匹配非空白字符

\d:匹配数字

\D:匹配非数字

. :匹配任意单个字符

上面所说的单词,在正则表达式中的含义:[a-zA-Z0-9]组成的字符或字符串都是单词

例如 nihao hello world 都是单词

字符组

[a-z]:代表任意单个小写字母

[^a-z]:只要单个非小写字母的其他任意字符

[A-Z]:代表任意大写字母

[0-9]:代表任意单个数字 [0-59] 代表匹配 0-5 和 9

[a-z0-9A-Z]:代表任意字母或数字

[a-z0-9A-Z_]:代表任意字母数字下划线 即匹配单词字符

字符类

[:lower:] 等价于 a-z

[:upper:] 等价于 A-Z

[:alpha:] 等价于 A-Za-z 也等价于[:lower:]+[:upper:]

[:digit:] 等价于0-9

[:alnum:] 等价于 等价于0-9A-Za-z 也等价于[:lower:]+[:upper:]+[:digit:]

[:xdigit:] 匹配十六进制数字 0 1 2 3 4 5 6 7 8 9 a b c d e f (大写也行)

[:blank:] 匹配空格或制表符

[:space:] 匹配空格,制表符,换行符,换页符,垂直制表符,回车符等等所有空白符号

[:punct:] 匹配所有标点符号 ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` {}

[:print:] 可打印字符,等价于[:alnum:]+[:punct:]+空格

[:graph:] 圆形字符,即能展现字符颜色的符号,等价于[:alnum:]+[:punct:]

位置锚定

^ 匹配行首

$ 匹配行尾

\< 匹配单词开头处的位置

\> 匹配单词结尾处的位置

^ 内容 $ 用于匹配整行

^$ 匹配空行

表示次数

* 表示匹配前面的字符任意次,包括0次

.* 任意长度的任意字符

\? 匹配其前面的字符出现0次或1次 即可有可无

\+ 匹配其前面的字符出现最少1次 即:肯定会出现 =>1次

\{n\} 匹配前面的字符n次

\{m,n\} 匹配前面的字符m次 至多n次

\{,n\} 匹配前面的字符至多n次 ,<=n

\{n,\} 匹配前面的字符至少n次

扩展正则表达式

grep -E

egrep 默认使用的 扩展正则

表示次数

* 匹配前面字符任意次

? 0或1次

  • 1次或多次

{n} 匹配n次

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

{,n} 匹配前面的字符至多n次

{n,} 匹配前面的字符至少n次

表示分组

() 分组

分组:() 将多个字符捆绑在一起,当作一个整体处理,如: \(root\)+

后向引用:\1,\2, ...

| 或者

a|b a或b C|cat C或cat (C|c)at Cat 或cat

grep

过滤

格式: grep [选项]... 查找条件 目标文件

选项

-m 匹配m次后停止 grep -m 1 root /etc/passwd #多个匹配只取第一个

-v 取反

-i 忽略大小写

-n 显示匹配的行号

-c 统计匹配的行数

-o 仅显示匹配到的字符串

-q 静默模式 不输出任何信息 一般用于脚本

-A 打印后指定行

-B 打印前指定行

-C 前后各指定行

-e 实现多个选项间逻辑or关系 grep -e root -e bash /etc/passwd #包含root或者包含bash 的行

-w 匹配整个单词

-E 使用ERE 使用扩展正则

-F 不支持正则表达式 相当于 fgrep

-f file根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件

-r 递归目录,但不处理逻辑

-R 递归目录,但处理软连接

相关推荐
问道飞鱼3 小时前
【知识科普】认识正则表达式
数据库·mysql·正则表达式
我码玄黄9 小时前
正则表达式优化之算法和效率优化
前端·javascript·算法·正则表达式
Java编程乐园16 小时前
Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】
java·正则表达式
好学近乎知o19 小时前
正则表达式(学习Django过程中可能涉及的)
学习·正则表达式·django
SunnyRivers3 天前
基础爬虫案例实战
正则表达式·爬虫实战·多进程·requests
西洼工作室4 天前
【java 正则表达式 笔记】
java·笔记·正则表达式
kiss strong4 天前
正则表达式
正则表达式
Linux运维技术栈4 天前
Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作
开发语言·python·正则表达式
jackiendsc4 天前
Java中正则表达式的介绍、使用场景及示例代码
java·开发语言·正则表达式
taller_20004 天前
VBA之正则表达式(48)-- 快速拆分中文语句
正则表达式·正则·拆分中文·中文拆分·中文标点