linux 扩展正则表达式

linux 扩展正则表达式使用 linux 扩展正则表达式在使用的时候配合 grep 命令 需要使用 grep E 或者 egrep 命令使用 基本正则表达式 扩展正则列表 正则符号 描述 a n m 匹配前一个字符最少 n 次 最多 m 次 a n 匹配前一个字符最少 n 次 m n 匹配 n 到 m 次 前一个字符至少连续出现了 n 次 最多连续出现了 m 次 a n

大家好,我是讯享网,很高兴认识大家。

使用

linux 扩展正则表达式在使用的时候配合 grep 命令 需要使用 grep -E 或者egrep 命令使用,

基本正则表达式

在这里插入图片描述
讯享网

扩展正则列表

在这里插入图片描述

正则符号 描述
a{n,m} 匹配前一个字符最少n次,最多m次
a{n,} 匹配前一个字符最少n次
{m,n} 匹配n到m次。 前一个字符至少连续出现了n次 最多连续出现了m次
a{n} 匹配前一个字符正好n次
a{,m} 匹配前一个字符最多m次
() 分组过滤,被括起来的内容表示一个整体
竖线 表示或者,同时过滤多个字符串
+ 匹配前一个字符1次或多次,前面字符至少出现1次
\b 转义

扩展符号 表述

正则符号 描述
+ + 表示前一个字符出现1次或1次以上
匹配任意零次或者一次,前一个符号连续出现0次或1次 有或没有与(.区别 是有且只有1个)。表示的信息0次或1次表示的内容和{0,1}其实是一样的
{m,n} 匹配n到m次。 前一个字符至少连续出现了n次 最多连续出现了m次
() ()表示一个整体 反向引用/后向引用
| 或者
\b 转义

扩展命令示例

+ 示例

1.1 理解+

[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt grep -E===egrep my  is  not . [root@oldboyedu50-lnb /oldboy]# grep -E '0+' oldboy.txt my  is  not . [root@oldboyedu50-lnb /oldboy]# grep '0\+' oldboy.txt my  is  not . [root@oldboyedu-50 oldboy]# egrep '[a-z]+' oldboy.txt  可以用[a-z]+显示单词 内容过多此处不粘贴 [root@oldboyedu-50 oldboy]# egrep '[a-z]+' oldboy.txt -o -o显示查找过程 am oldboy []与+连用 +会认为[]里面的是一个整体 所以显示为字符组 

讯享网

1.1.2 加+和不加+的区别

讯享网[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt -o 加+号 连在一起的会一起显示 000 00000 [root@oldboyedu50-lnb /oldboy]# egrep '0' oldboy.txt -o 不加+号 单独显示 0 0 0 0 0 0 0 0 
| 理解

2.1 | 的用法

[root@oldboyedu-50 oldboy]# egrep 'oldboy|linux' oldboy.txt 查找文件中oldboy或者linux的内容 I am oldboy teacher! I teach linux. my blog is http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com 

/etc/ssh/sshd_config 排除文件中的#和空

讯享网[root@oldboyedu-50 ssh]# egrep -v '^$|#' sshd_config 
() (小括号)

()表示一个整体 反向引用/后向引用

sed -r 使用扩展正则

思路:把你想要的内容保护起来 ()

sed 在 ‘sg’ 后两个井号之间使用 \数字 引用

[root@oldboyedu-50 oldboy]# egrep 'oldb(o|e)y' oldboy.txt 此处表示查找oldboy和oldbey [root@oldboyedu-50 oldboy]# echo |sed -r 's#(.*)#\1#g'  [root@oldboyedu-50 oldboy]# echo |sed -r 's#(.*)#<\1>#g' <123456> 将 修改为12<34>56 [root@oldboyedu-50 oldboy]# echo |sed -r 's#(34)#<\1>#g' 12<34>56 点表示任意一个字符,\2表示第二个括号。 [root@znix ~]# echo |sed -r 's#(.).(..).(.)#\2#g' 34 
{}(花括号)

前一个字符至少连续出现了n次 最多连续出现了m次

{n,} :至少匹配n次

{n,m} :匹配 n 到 m 次

{,m} :最多匹配m次

{m,n},{m},{m,},{,n}

1.4.1 大括号的不同方法

讯享网0{ 
   3,6} >=3 <=6 0{ 
   3} ==3 0{ 
   3,} >=3 0{ 
   ,6} >=0 <=6 

1.4.2 应用方法

 [root@oldboyedu-50 oldboy]# egrep '[0-9X]{18}' id.txt 此处表示{}前面的字符出现了18次 [root@oldboyedu50-lnb /oldboy]# egrep '0{3,4}' oldboy.txt 表示0出现了最少出现3次最多出现4次 my  is  not . [root@oldboyedu50-lnb /oldboy]# egrep '0{3}' oldboy.txt 表示0出现了3次 my  is  not . 
讯享网[root@oldboyedu50-lnb /oldboy]# cat id.txt 任 oldboy 任 3oldboy 任 lidao 任 alex98 任 3oldgir 吕  向 008852X [root@oldboyedu50-lnb /oldboy]# egrep '[0-9X]{18}' id.txt  #表示0到9和x 一共出现了18次 这样查找不精确 因为单独一个数字出现18次 也可以筛选出来 XXXXXXXXXXXXXXXXXX 向 008852X [root@oldboyedu50-lnb /oldboy]# egrep '[0-9]{17}[0-9X]' id.txt 精确查找 但是还不是最精确的 向 008852X 
? (问号)

?前一个符号连续出现0次或1次 有或没有

?表示的信息0次或1次表示的内容和{0,1}其实是一样的

? 重复0个或一个0 或者没有 的前面字符 (与.区别 是有且只有1个)

查i有一个 或者没有的m开头 e结尾的字符串 [root@MongoDB ~]# egrep "mi?e" mike.log my blog is i.miek.com I am miek. me 

正则表达式的 常见符号区别

.*组合符

.表示任意一个字符,*表示匹配前一个字符0次或多次,因此放在一起代表匹配所有内容,以及空格

+与* 区别

  • 重复一个或一个以上前面的字符 区别于(*是0或多个)
讯享网[root@MongoDB ~]# egrep "mi+e" mike.log my blog is i.miek.com I am miek. miiiie 

*与+的区别

[root@MongoDB ~]# egrep "mi*e" mike.log my blog is i.miek.com I am miek. miiiie me 

.与? 区别

?重复0个或一个0 或者没有 的前面字符 (与.区别 是有且只有1个)

查i有一个 或者没有的m开头 e结尾的字符串

讯享网[root@MongoDB ~]# egrep "mi?e" mike.log my blog is i.miek.com I am miek. me 
[root@MongoDB ~]# egrep "mi.e" mike.log I am mike! 

| 表示过滤多个字符串

讯享网[root@MongoDB ~]# egrep "3306|1521" /etc/services mysql /tcp # MySQL mysql /udp # MySQL ncube-lm /tcp # nCube License Manager ncube-lm /udp # nCube License Manager 

() 分组过滤 反向引用

[root@MongoDB ~]# egrep "mi(ke|ek)" mike.log I am mike! my blog is i.miek.com I am miek. 

正则表达式的常见符号搭配

讯享网. 表示任意单个字符。 * 表示前面的字符连续出现任意次,包括0次。 .* 表示任意长度的任意字符,与通配符中的*的意思相同。 \ 表示转义符,当与正则表达式中的符号结合时表示符号本身。 [ ]表示匹配指定范围内的任意单个字符。 [^ ]表示匹配指定范围外的任意单个字符。 [[:alpha:]] 表示任意大小写字母。 [[:lower:]] 表示任意小写字母。 [[:upper:]] 表示任意大写字母。 [[:digit:]] 表示0到9之间的任意单个数字(包括0和9)。 [[:alnum:]] 表示任意数字或字母。 [[:space:]] 表示任意空白字符,包括"空格""tab键"等。 [[:punct:]] 表示任意标点符号。 [^[:alpha:]] 表示单个非字母字符。 [^[:lower:]] 表示单个非小写字母字符。 [^[:upper:]] 表示单个非大写字母字符。 [^[:digit:]] 表示单个非数字字符。 [^[:alnum:]] 表示单个非数字非字母字符。 [^[:space:]] 表示单个非空白字符。 [^[:punct:]] 表示单个非标点符号字符。 [0-9][[:digit:]]等效。 [a-z][[:lower:]]等效。 [A-Z][[:upper:]]等效。 [a-zA-Z][[:alpha:]]等效。 [a-zA-Z0-9][[:alnum:]]等效。 [^0-9][^[:digit:]]等效。 [^a-z][^[:lower:]]等效。 [^A-Z][^[:upper:]]等效 [^a-zA-Z][^[:alpha:]]等效 [^a-zA-Z0-9][^[:alnum:]]等效 ^:表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配。 $:表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配。 ^$:表示匹配空行,这里所描述的空行表示"回车",而"空格""tab"等都不能算作此处所描述的空行。 ^abc$:表示abc独占一行时,会被匹配到。 \<或者\b :匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现。 \>或者\b :匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现。 \B:匹配非单词边界,与\b正好相反。 

正则表达式归纳

次数匹配

用于要指定其次数的字符的后面,表示指定其前面的字符

* : 任意次 \? :0或1次 \+ :1或多次 \{ 
   m\} :精确限制为m次 \{ 
   m,n\} : 至少m次,至多n次,[m,n] \{ 
   0,n\} :至多n次,少了可以没有 \{ 
   m,\} :至少m次,多则不限 .* : 匹配任意长度的任意字符 

常见正则表达式

^ :以某字符开头

$ :以某字符结尾

. :匹配除换行符之外的任意单个字符

* :匹配前导字符的任意个数

[] :某组字符串的任意一个字符

[^] :取反

[a-z] :匹配小写字母

[A-Z] :匹配大写字母

[a-zA-Z] :匹配字母

[0-9] :匹配数字

\ :取消转义

() :分组

\n :代表第n个分组

正则表达式的坑

2.1 坑1 grep ‘0*’

会把文件内容都显示出来

0* 0次 没有 grep会把文件内容都显示出来

0次以上 0 00000000000

讯享网[root@znix ~]# grep "0*" clsn.txt 坑1 grep '0*' 会把文件内容都显示出来 I am clsn teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://clsn.blog.51cto.com our site is http://www.etiantian.org my  num is . not . my god ,i am not oldbey,but clsn! [root@znix ~]# grep -o "0*" clsn.txt 000 00000 

2.2 坑2 [oldboy]

[oldboy]查找的内容是o l d b o y 而不是oldboy整体

[root@oldboyedu50-lnb /oldboy]# grep '[oldboy]' oldboy.txt 在此处oldboy查找的内容是o l d b o y 而不是oldboy整体 I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com my  is  not . my god ,i am not oldbey,but OLDBOY! [root@oldboyedu50-lnb /oldboy]# grep -o '[oldboy]' oldboy.txt 显示查找过程 o l d b o y l l b 

2.3 坑3 [#KaTeX parse error: Expected group after '^' at position 5: ] [^̲] [^#$]

[]中 $ . 没有特殊含义 类似于\转义字符

讯享网[root@oldboyedu50-lnb /oldboy]# cat oldboy.txt 查看文件内容 I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! +++++\\\\\\!!!!$$$$$$^^^ !!!^^^^^$$$$@@@@@ [root@oldboyedu50-lnb /oldboy]# grep '[^#^$]' oldboy.txt 此处表示排除#^$ 相当于去除了特殊含义 I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! +++++\\\\\\!!!!$$$$$$^^^ !!!^^^^^$$$$@@@@@ [root@oldboyedu50-lnb /oldboy]# grep '\.$' oldboy.txt 此处表示查找以.结尾的 I teach linux. not . [root@oldboyedu50-lnb /oldboy]# grep '[.]$' oldboy.txt 此处也表示查找以.结尾的 与\意思相同 I teach linux. not . 

2.4 坑4 grep -v与[^a-z]

[^a-z] 排除按字符 某个字符 某些字符 grep -v [a-z] 排除按行 [root@oldboyedu50-lnb /oldboy]# grep '[^a-z]' oldboy.txt [root@oldboyedu50-lnb /oldboy]# grep -v '[a-z]' oldboy.txt 
小讯
上一篇 2025-01-18 09:37
下一篇 2025-01-08 22:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/12617.html