当前位置: 首页 > news >正文

Linux之正则表达式

正则表达式是组成“操作”的基本语法,而这些“操作”是应用于Sed和Awk必备的能力。因此只有了解了正则表达式,才能学好Sed和Awk。

正则表达式分为基础正则表达式(Regular Expression)与扩展正则表达式(Extended Regular Expression),它不是一个工具程序,而是一个字符串处理的标准依据,是使用单个字符搜索、匹配一系列符合某个语法规则的字符串。它由普通字符(a~z)以及特殊字符(又叫“元字符”)组成。如果要以正则表达式的方式处理字符串,就得使用支持正则表达式的工具。

文本处理工具

基础正则表达式

扩展正则表达式

vi编辑器

支持

grep

支持

egrep

支持

支持

sed

支持

awk

支持

支持

通配符匹配文件

基本正则表达式

扩展正则表达式

元字符

. 匹配任意单个字符,可以是一个汉字

[] 匹配指定范围内的任意单个字符,示例:[zhou] [0-9] [] [a-zA-Z] [:alpha:]

[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]

[:alnum:] 字母和数字

[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z

[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]

[:upper:] 大写字母

[:blank:] 空白字符(空格和制表符)

[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

[:digit:] 十进制数字

[:xdigit:] 十六进制数字

[:graph:] 可打印的非空白字符

[:print:] 可打印字符

[:punct:] 标点符号

\w #匹配单词构成部分,等价于[_[:alnum:]]

\W #匹配非单词构成部分,等价于[^_[:alnum:]]

\S #匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

\s #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符

表示次数

* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配

.* #任意长度的任意字符,不包括0次

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

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

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

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

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

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

位置锚定

^ #行首锚定,用于模式的最左侧

$ #行尾锚定,用于模式的最右侧

^PATTERN$ #用于模式匹配整行 (单独一行 只有root)

^$ #空行

^[[:space:]]*$ # 空白行

\< 或 \b #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)

\> 或 \b #词尾锚定,用于单词模式的右侧

\<PATTERN\> #匹配整个单词

示例

#过滤出不是以#号开头的非空行

[root@localhost ~]# grep "^[^#]" /etc/fstab

二、扩展正则表达式

扩展正则表达式是对基础正则表达式的扩充与深化

grep -E / egrep

-v 取反

-o 匹配

-i 忽略大小写

扩展元字符

+:匹配前面的子表达式1次以上,如:go+d,将匹配至少一个o

?:匹配前面的子表达式0次或者1次,如go?d,将匹配gd或god

():将()中的字符串作为一个整体,如:(xzy)+,将匹配xzy整体1次以上

|:以或的方式匹配字符串,如:good|great,将匹配good或者great

()分组

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

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为:\1,\2,\3,....

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

| 或者

a|b #a或b

C|cat #C或cat

(C|c)at #Cat或cat

[root@localhost ~]# ifconfig ens33|grep netmask|egrep -o '([0-9]{1,3}.){4}'

192.168.247.99

255.255.255.0

192.168.247.255

例子

表示qq

[root@localhost ~]# echo "2905168638" |grep "\b[0-9]\{6,12\}\b"

表示邮箱

[root@localhost ~]# echo "2288635976@qq.com" |grep -E "[[:alnum:]_]+@[[:alnum:]_]+\.[[:alnum:]_]+"

表示手机号

[root@localhost ~]# echo "17962433196" |grep -E "\b1[3456789][0-9]{9}\b"
http://www.lryc.cn/news/4291.html

相关文章:

  • 前端高频面试题-HTML和CSS篇(一)
  • Redis 专题总结
  • 【Python百日进阶-Web开发-Vue3】Day515 - Vue+ts后台项目2:登录页面
  • 【博客620】prometheus如何优化远程读写的性能
  • redis可视工具AnotherRedisDesktopManager的使用
  • 【idea】idea生产类注释和方法注释
  • jenkins +docker+python接口自动化之jenkins容器安装python3(二)
  • go 命令行工具整理
  • RuntimeError: CUDA out of memory
  • Kubernetes1.25中Redis集群部署实例
  • C++11实现计算机网络中的TCP/IP连接(Windows端)
  • Spring框架自定义实现IOC基础功能/IDEA如何手动实现IOC功能
  • pip离线安装windows版torch
  • Redis核心知识点
  • 14. 最长公共前缀
  • SignalR注册成Windows后台服务,并实现web前端断线重连
  • 【前端笔试题二】从一个指定数组中,每次随机取一个数,且不能与上次取数相同,即避免相邻取数重复
  • 专栏关注学习
  • 【手写 Vuex 源码】第八篇 - Vuex 的 State 状态安装
  • Mac下拉式终端的安装与配置 (iTerm2)
  • 使用 Spring 框架结合阿里云 OSS 实现文件上传的代码示例
  • 神经网络基础知识
  • SpringBoot开发规范部分通用模板+idea配置【项目通用-1】
  • 程序的机器级表示part3——算术和逻辑操作
  • 基于YOLOV5的钢材缺陷检测
  • Session与Cookie的区别(三)
  • 七大设计原则之接口隔离原则应用
  • 【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc
  • JavaScript HTML DOM - 改变CSS
  • mycat连接mysql 简单配置