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的

使用[]来查找集合字符

要查找testt和text时

erlang 复制代码
grep "te[sx]t" test.txt -i -n


要查找包含重复或单个字符o时

erlang 复制代码
grep 'oo' test.txt -i -n
grep 'o' test.txt -i -n


匹配数字

erlang 复制代码
grep '[0-9]' test.txt
grep '[0-5]' test.txt

查找行首"^"与行尾字符"$"

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]类似这样的,不能跨越匹配会报错

查找以.结尾的行

erlang 复制代码
grep '$' test.txt -n
grep '\.$' test.txt -n

这里不知道什么原因不能够查询结尾的行,我猜测是因为我是从文本编辑器里面输入的,换行符估计产生了问题,因此要匹配以什么结尾的匹配不上。


查找任意一个字符"."与重复字段"*"

erlang 复制代码
grep -n'w..d' test.txt  %%查询wd中间有两个字母的字符串
grep -n'oo*' test.txt   %%匹配一个o

在上述结果中,"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"命令即可


查找连续字符范围{}

上述只能匹配 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的字符串
相关推荐
小码的头发丝、18 分钟前
Java进阶学习笔记|面向对象
java·笔记·学习
ZHOUPUYU23 分钟前
Centos常用命令,按功能分类,用户和权限管理等
linux·运维·centos
vvw&42 分钟前
如何在 Ubuntu 22.04 上安装 phpMyAdmin
linux·运维·服务器·mysql·ubuntu·php·phpmyadmin
坊钰1 小时前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表
阿七想学习2 小时前
数据结构《排序》
java·数据结构·学习·算法·排序算法
灰勒塔德2 小时前
Linux文件IO
linux·运维·服务器
花姐夫Jun3 小时前
在 CentOS 8 系统上安装 Jenkins 的全过程
linux·centos·jenkins
是店小二呀3 小时前
【Linux】Linux开发利器:make与Makefile自动化构建详解
linux·运维·自动化
BUG 4044 小时前
LINUX--shell
linux·运维·服务器
菜鸟小白:长岛icetea4 小时前
Linux零基础速成篇一(理论+实操)
linux·运维·服务器