1. 扩展正则表达式

1.1 +(加号)

+ 表示前一个字符出现1次或1次以上

1.1.1 理解+

要求:取出文件内容连续出现的小写字母

[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt       grep -E===egrep

my qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# grep -E '0+' oldboy.txt

my qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# grep '0\+' oldboy.txt

my qq is 49000448

not 4900000448.

[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

1.2 | 或者

1.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

1.2.2 | 的用法

排除文件中的#和空行

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

[root@oldboyedu-50 ssh]# egrep -v '^$|#' sshd_config

1.3 () (小括号)

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

sed -r 使用扩展正则

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

sed 在 's###g' 后两个井号之间使用  \数字 引用

[root@oldboyedu-50 oldboy]# egrep 'oldb(o|e)y' oldboy.txt            此处表示查找oldboy和oldbey

[root@oldboyedu-50 oldboy]# echo 123456|sed -r 's#(.*)#\1#g'

123456

[root@oldboyedu-50 oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g'

<123456>

将123456  修改为12<34>56

[root@oldboyedu-50 oldboy]# echo 123456|sed -r 's#(34)#<\1>#g'

12<34>56

点表示任意一个字符,\2表示第二个括号。

[root@znix ~]# echo 123456|sed -r 's#(.).(..).(.)#\2#g'

34

1.4 {}(花括号)

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

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 qq is 49000448

not 4900000448.

[root@oldboyedu50-lnb /oldboy]# egrep '0{3}' oldboy.txt   表示0出现了3次

my qq is 49000448

not 4900000448.

1.4.3 {} 的用法

取出文件中的身份证号码

[root@oldboyedu50-lnb /oldboy]# cat id.txt

金 211324198705244720

万 500224197105168312

任 1231231231oldboy

任 3oldboy

任 lidao97303136098

任 alex2197303136098

任 350182197303oldgir

吕 211282199209113038

孔 150000198309176071

邹 371001197412221284

贺 130185200011215926

杜 362522198711278101

向 14052219961008852X

[root@oldboyedu50-lnb /oldboy]# egrep '[0-9X]{18}' id.txt   

#表示0到9和x 一共出现了18次 这样查找不精确  因为单独一个数字出现18次 也可以筛选出来

金 211324198705244720

万 500224197105168312

吕 211282199209113038

孔 150000198309176071

邹 371001197412221284

贺 130185200011215926

杜 362522198711278101

   XXXXXXXXXXXXXXXXXX

向 14052219961008852X

[root@oldboyedu50-lnb /oldboy]# egrep '[0-9]{17}[0-9X]' id.txt   精确查找 但是还不是最精确的

金 211324198705244720

万 500224197105168312

吕 211282199209113038

孔 150000198309176071

邹 371001197412221284

贺 130185200011215926

杜 362522198711278101

向 14052219961008852X

1.5 ? (问号)

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

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

第2章 正则表达式坑

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 qq num is 49000448.

not 4900000448.

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 qq is 49000448

not 4900000448.

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 [^#^$]  [^$]  [^#$]

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

[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 4900000448.

[root@oldboyedu50-lnb /oldboy]# grep '[.]$'  oldboy.txt      此处也表示查找以.结尾的 与\意思相同

I teach linux.

not 4900000448.

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

Linux扩展正则表达式的更多相关文章

  1. linux 扩展正则表达式 egrep

    使用命令为grep -E 及egrep [root@MongoDB ~]# cat mike.log I am mike! I like linux. I like play football, te ...

  2. Linux通配符与基础正则表达式、扩展正则表达式

    在Linux命令行操作或者SHELL编程中总是容易混淆一些特殊字符的使用,比如元字符‘*’号,作为通配符匹配文件名时表示0个到无穷多个任意字符.而作为正则表达式匹配字符串时,表示重复0个到无穷多个的前 ...

  3. linux正则表达式(基础正则表达式+扩展正则表达式)

    正则表达式应用非常广泛,例如:php,Python,java等,但在linux中最常用的正则表达式的命令就是grep(egrep),sed,awk等,换句话 说linux三剑客要想能工作的更高效,就一 ...

  4. linux shell 正则表达式(BREs,EREs,PREs)差异比较

    linux shell 正则表达式(BREs,EREs,PREs)差异比较 则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符 串的单个字符串.在很多文本编辑器或其他工具里 ...

  5. linux shell 正则表达式(BREs,EREs,PREs)的比较

    原文 :   linux shell 正则表达式(BREs,EREs,PREs)差异比较 在使用 linux shell的实用程序,如awk,grep,sed等,正则表达式必不可少,他们的区别是什么 ...

  6. linux备忘录-正则表达式与文件格式化处理

    正则表达式 POSIX标准的符号 [:alnum:] -> 英文大小写字母和数字 0-9,A-Z,a-z [:alpha:] -> 英文大小写字母 A-Z,a-z [:blank:] -& ...

  7. bash基础——grep、基本正则表达式、扩展正则表达式、fgrep

    grep grep全称:Globally search a Regular Expression and Print 全局搜索正则表达式 正规表达式本质上是一种"表示方法", 只要 ...

  8. Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

    目录 正则表达式 基本正则表达式 扩展正则表达式 grep tr diff du wc find 正则表达式 正则表达式,又称正规表示法.常规表示法( Regular Expression,在代码中常 ...

  9. 『忘了再学』Shell基础 — 25、扩展正则表达式

    目录 1.扩展正则表达式说明 2.练习 (1)+和?练习 (2)|和()练习 3.注意(重点) 1.扩展正则表达式说明 熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Sh ...

随机推荐

  1. JAVA基础——IO流字节流

    在Java中把不同的输入输出源(键盘.文件.网路连接)抽象表述为“流”. 1.输入流.输出流 .字节输入流通过FileInputStream和来操作 字节输出流通过FileOutputStream来操 ...

  2. Gym - 101670J Punching Power(CTU Open Contest 2017 最大独立集)

    题目: The park management finally decided to install some popular boxing machines at various strategic ...

  3. fread快读+fwrite快速输出

    定义数组 char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf; 读入 #define getchar() (p1==p2&a ...

  4. Python进阶-操作redis

    1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建,存在则修改 r.set('name', 'z ...

  5. Just a Hook (HDU 1698) 懒惰标记

    Just a Hook (HDU 1698) 题链 每一次都将一个区间整体进行修改,需要用到懒惰标记,懒惰标记的核心在于在查询前才更新,比如将当前点rt标记为col[rt],那么此点的左孩子和右孩子标 ...

  6. Spring 源码学习(一)

    工作好多年了,越来越心浮气躁了,好多东西都是一知半解的,所以现在需要静下心来好好学习一门技术. 就选Spring了, spring 设计java 开发的方方面面. 期待目标 对Spring 有个更深层 ...

  7. __setitem__() __getitem__() __delitem__()

    #item系列 和对象使用[]访问值有联系 #obj={'k':'v'} #print(obj) #print(obj['k']) class B: def __getitem__(self, ite ...

  8. JS中showModalDialog 详细使用方法

    基本介绍: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) window.showModalDialog() 方法用来创建一个 ...

  9. codevs3410 别墅房间

    题目描述 Description 小浣熊松松到他的朋友家别墅去玩,发现他朋友的家非常大,而且布局很奇怪.具体来说,朋友家的别墅可以被看做一个N*M的矩形,有墙壁的地方被标记为’#’,其他地方被标记为’ ...

  10. tapset::iosched(3)

    DESCRIPTION This family of probe points is used to probe the IO scheduler activities. It contains th ...