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

Linux:Shell编程之正则表达式

目录

绪论

1、正则表达式

1.1 通配符

1.2 正则表达式分类

1.3 基本正则

1.4 正则表达式中表示次数的表达式

1.5 位置锚定

1.5.1 词首锚定和词尾锚定

1.6 分组()

1.7  逻辑或

1.8 扩展正则


绪论

正则表达式:有一类特殊字符以及文本字符所编写的一种模式,用来处理文本当中的内容,其中的一些字符不表示字符的字面含义,表示控制或者通配的功能

通配符:只能匹配文件名与目录名,不能匹配文件的内容

1、正则表达式

1.1 通配符

只能匹配文件名与目录名,不能匹配文件的内容

*匹配任意一个或者多个字符
touch  1.txt  2.txt  3.txt
ls *.txt?匹配任意一个字符(就是匹配单个字符)
ls ?.txt[ ] 匹配范围内的任意单个字符
touch {a..z}.txt
ls [a-n].txt

1.2 正则表达式分类

· 基本正则表达式

· 扩展正则表达式 

1.3 基本正则

字符匹配,元字符

. 匹配任意的单个字符,可以是一个汉字,\表示转义符,\.就是一个点 

eg:ls  |  grep  "12."  输出为123.txt

"()括号表示分组的意思",\(\)就是括号

eg:"[]"匹配指定范围内的任意单个字符

ls  |  grep  "[0-9]"

eg:大小写和数字一起匹配

ls  |  grep  "[0-9A-Za-z]"

eg:"[^]"取反,指定范围之外的

ls  |  grep  "[^A-Z]"

[[:space:]]包含空格,tab键,换行的空格,回车的空格

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

eg:以rc开头的任意单个字符0-6的数字

ls  /etc  |  grep  "rc[0-6]"

eg:只匹配以rc开头的文件,.不是正则

ls  /etc  |  grep  "rc\."

通配符不能完全匹配大小写, 正则可以

1.4 正则表达式中表示次数的表达式

" * "匹配前面的字符任意次,0次也行,无数次也行,有多少匹配多少(贪婪模式),没有也行

eg:

echo  goole  |  grep  "go*gle"  输出为google

echo  ggle  |  grep  "go*gle"  输出为ggle

" .* "匹配任意长度的字符,至少要有一次,不包括0次

eg:

echo  goole  |  grep  "go.*gle"  输出为google

echo  ggle  |  grep  "go.*gle"  此时匹配不到

" \?"匹配前面的字符0次或者一次,可有可无

" \+ " 匹配前面的字符至少1次,最多可以无数次

eg:

echo  ggle  |  grep  "go\+gle"

\{n\}匹配前面的字符等于n次,必须连续出现才能匹配

eg:echo  gogle  |  grep  "go\{|\}gle"

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

\{,n\}匹配前面的字符,最多n次(只要出现几次,出现都算,除非没有,只要前面的字符有,都算)

eg:echo  ggle  |  grep  "go\{,3}gle"

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

1.5 位置锚定

^ 以什么为开头,在模式的左侧  

eg:cat  /etc/passwd  |  grep  "^root"

$ 以什么为结尾,在模式的右侧 r$表示以r为结尾

^root$ 用于匹配整行,而且整行中只有以后个root

^$ / ^[[:space:]]$  匹配空行

1.5.1 词首锚定和词尾锚定

词首锚定 \< 或者 \b

词尾锚定 \> 或者 \b   

根据\b的前后位置判断

eg:echo  hello-123  |  grep  "123\b"

输出为标红的hello-123

echo  hello-123  |  grep  "\bhello"

输出为标红的hello-123

\<root\> 表示匹配整个单词

1.6 分组()

echo  abccc  |  grep  "abc\{3\}"

输出为abccc

\{n\}表示正好出现n次,n次表示前面的字符必须要连续出现才能匹配

\{,n}只要你出现几次都算,除非没有

eg:echo  golgogle  |  grep  "\(go  \)\{}\}gle"

输出为gogle

\(go\)是一个租,连续的go只出现一个,两个不连续的go都出现

1.7  逻辑或

\|:斜杠管道符表示逻辑或

echo  | abc2abc  |  grep  "(1\|2\)abc"

1.8 扩展正则

不用写斜杠了

需要使用grep  -E 或者egrep

echo  1abc2abc  |  grep  -E  "(1|2)abc"

匹配邮箱号码  :

vim  /opt/pipei.txt

cat  pipei.txt  |  grep  -E "[0-9a-z]{9,11}@[0-9a-z]{2,3}\.[a-z]{2,3} 

http://www.lryc.cn/news/121546.html

相关文章:

  • Python Opencv实践 - 图像缩放
  • 大脑营行|“福安市华龙教育基金”支持家乡教育事业发展
  • Windows 2016安装Jenkins
  • 章节4:Burp Target模块
  • CAN总线一些经典的现场故障
  • VS+QT+Opencv使用YOLOv4对视频流进行目标检测
  • oracle创建管理用户并授权
  • ​三江学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》
  • 机器学习笔记 - 基于PyTorch + 类似ResNet的单目标检测
  • 系列二、Redis简介
  • 基于TF-IDF+TensorFlow+词云+LDA 新闻自动文摘推荐系统—深度学习算法应用(含ipynb源码)+训练数据集
  • 尼科彻斯定理-C语言/Java
  • C++学习笔记——从面试题出发学习C++
  • WebAPIs 第二天
  • 解决macOS执行fastboot找不到设备的问题
  • Linux命令 -- chmod
  • 国产超低功耗32位MCU的应用
  • 将数组(矩阵)旋转根据指定的旋转角度scipy库的rotate方法
  • MFC创建和使用OCX控件
  • 【设计模式】抽象工厂模式
  • 小白带你学习linux的Redis3.2集群(三十三)
  • 嵌入式技术,就在你的手边!
  • nodejs+vue+elementui健康饮食美食菜谱分享网站系统
  • input 设置type=“number“,鼠标悬停关闭提示语
  • CSDN互利共赢玩法实战!!!
  • java.sql.SQLFeatureNotSupportedException 问题及可能的解决方法
  • 如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件
  • 【智力悬疑题】——【“找凶手”解法】
  • 【论文阅读】基于深度学习的时序异常检测——TimesNet
  • P3741 honoka的键盘