erlang学习:Linux命令学习7

grep进阶,正则表达式初步学习

正则表达式简介

正则表达式是由一些具有特殊含义的字符组成的字符串,多用于查找、替换符合规则的字符串。在表单验证、Url映射等处都会经常用到,同样在linux中也能够用到。

元字符

元字符:即为有特定含义的字符,常见的元字符如下

常用的元字符

^ :匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配"^"字符本身,需要转移"^"

:匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则""也匹配'\n'或'r'

. :"."代表除"\n\s"之外的任何单个字符

\ :反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的 特殊意义

*:匹配前面的子表达式零次或多次。要匹配"*"字符,要进行\转移

\] :字符集合,匹配所包含的任意的一个字符 \[\^\]: 复制字符集。匹配未包含在\[ \]内的任意一个字符 \[n1-n2\] :字符范围。匹配指定范围内的任意一个字符。例如\[a-z\]可以匹配到a到z范围内的任意一个小写字母字符 {n} :n是一个非负整数,匹配确定的n次,例如"o{2}"不能匹配"Bob"中的"o",但是能匹配到"food"中的"oo" {n,} :n是一个非负整数,至少(最少)匹配n次。例如,"o{2,}"不能匹配"Bob"中的"o",但是能匹配"fooooood"中的所有o。"o{1.}"等于"o+" {n,m}: n和m均为非负整数,其中n\<=m,最少匹配n次,最多匹配m次 测试文本文件如下 ```erlang I am teacher I am student I ma student I like Linux I like erlang I like Java Hello word! 12345 84327018 sdsaf dsgfjokjdfklg jjjj. kkkkkkkk. wood. woooood. test text 1_a 11111. aaa_ 131287974823 ``` **对字符串匹配** ```erlang grep "like" test.txt -i -n %%搜寻含有like的 grep -vn "like" test.txt -i -n %%搜寻不含有like的 ``` ![请添加图片描述](https://i-blog.csdnimg.cn/direct/2cd10de854084daf98fdf96304d8bae1.png) **使用\[\]来查找集合字符** 要查找testt和text时 ```erlang grep "te[sx]t" test.txt -i -n ``` ![请添加图片描述](https://i-blog.csdnimg.cn/direct/eb49915d9fdf4cdfb97901db48c03736.png) **要查找包含重复或单个字符o时** ```erlang grep 'oo' test.txt -i -n grep 'o' test.txt -i -n ``` ![请添加图片描述](https://i-blog.csdnimg.cn/direct/fe0c133821ee479f9f6564d448ffc500.png) **匹配数字** ```erlang grep '[0-9]' test.txt grep '[0-5]' test.txt ``` ![请添加图片描述](https://i-blog.csdnimg.cn/direct/a49c8029601e4328a084e226aa885cb7.png) ![请添加图片描述](https://i-blog.csdnimg.cn/direct/c74a79dd994342e1a5c82528b41f8abb.png) **查找行首"\^"与行尾字符"$"** ```erlang grep '^[a-z]' test.txt -n %%匹配开头的字符串a-z grep '^[z-A]' test.txt -n grep '^[A-z]' test.txt -n grep '^[A-Z]' test.txt -n %%匹配开头的字符串A-Z ``` \[\]中貌似只能匹配类似\[0-9\],\[a-z\],\[A-Z\]类似这样的,不能跨越匹配会报错 ![请添加图片描述](https://i-blog.csdnimg.cn/direct/0701773c5d95431387d8a814e93d8ff8.png) **查找以.结尾的行** ```erlang grep '$' test.txt -n grep '\.$' test.txt -n ``` 这里不知道什么原因不能够查询结尾的行,我猜测是因为我是从文本编辑器里面输入的,换行符估计产生了问题,因此要匹配以什么结尾的匹配不上。 ![请添加图片描述](https://i-blog.csdnimg.cn/direct/77a786c075af4db2a51cb75ed6d56807.png) ![请添加图片描述](https://i-blog.csdnimg.cn/direct/cb81d61b71ee4210ab4f6a60a1b2a1f4.png) **查找任意一个字符"."与重复字段"\*"** ```erlang grep -n'w..d' test.txt %%查询wd中间有两个字母的字符串 grep -n'oo*' test.txt %%匹配一个o ``` ![请添加图片描述](https://i-blog.csdnimg.cn/direct/102e417804724194a2cfaff1b5b08c54.png) 在上述结果中,"wood"字符串"w...d"匹配规则。若想要查询 oo、ooo、ooooo 等资料, 则需要使用星号(*)元字符。但需要注意的是,"*"代表的是重复零个或多个前面的单字符。 "o\*"表示拥有零个(即为空字符)或大于等于一个"o"的字符,因为允许空字符,所以执行"grep -n'o\*'test.txt"命令会将文本中所有的内容都输出打印。如果是"oo\*",则第一个 o 必须存在, 第二个 o 则是零个或多个 o,所以凡是包含 o、oo、ooo、ooo,等的资料都符合标准。同理,若查询包含至少两个 o 以上的字符串,则执行"grep -n 'ooo\*' test.txt"命令即可 ![请添加图片描述](https://i-blog.csdnimg.cn/direct/a6764c471cbc4d088ded7d6eba3ac6ad.png) **查找连续字符范围{}** 上述只能匹配 1-无限个o,无法匹配1-3个o的情况,如果需要相应的匹配需要使用{} ```erlang grep -n 'o\{2\}' test.txt %%查找两个o的字符串 grep -n 'wo\{2\}' test.txt %%查找w之后两个o的字符串 grep -n 'wo\{2,5\}d' test.txt %%查找w之后中间2-5个o,结尾是d的字符串 ``` ![请添加图片描述](https://i-blog.csdnimg.cn/direct/e43358c3b12f428b994728250b84bc7e.png)

相关推荐
云上艺旅4 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
你觉得2055 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
cg50175 小时前
Spring Boot 的配置文件
java·linux·spring boot
暮云星影5 小时前
三、FFmpeg学习笔记
linux·ffmpeg
rainFFrain5 小时前
单例模式与线程安全
linux·运维·服务器·vscode·单例模式
GalaxyPokemon5 小时前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
mingqian_chu6 小时前
ubuntu中使用安卓模拟器
android·linux·ubuntu
A旧城以西6 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
无所谓จุ๊บ6 小时前
VTK知识学习(50)- 交互与Widget(一)
学习·vtk
FAREWELL000756 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法