使用
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

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