• 周五. 10月 7th, 2022

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

正则表达式

admin

11月 28, 2021

第1章 正则表达式

1.1 什么是正则

特殊符号表示文字 文本

^ 开头

[0-9] 数字

1.2 作用

 提高效率 省事

1.3 分类

基础正则表达式

^ $  ^$  .  *  .*  [0-9]  [^0-9]

扩展正则表达式

|  ()  +  {}  ?

1.4 准备

  1. 预警-中文符号
  2. grep/egrep

cat >>/etc/profile<<EOF
alias grep=’grep –color=auto’
alias egrep=’egrep –color=auto’
EOF
source /etc/profile      给找到的内容加上红色

1.5 基础正则表达式

环境准备-创建oldboy.txt内容如下

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 site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

  1.   ^oldboy 以oldboy开头的行 以….开头的行

[[email protected]
oldboy]# grep “^m” oldboy.txt

my blog is
http://oldboy.blog.51cto.com

my qq num is
49000448.

my god ,i am
not oldbey,but OLDBOY!

    2.  $  m$  以m结尾的行
以…..结尾的行

[[email protected]
oldboy]# grep “m$” oldboy.txt

my blog is http://oldboy.blog.51cto.com      
注意每行的最后不要有空格,否则找不到内容   

  3. ^$ 空行
这一行里面什么符号都没有

[[email protected] oldboy]# grep -n “^$”
oldboy.txt    显示文件的空行并显示行号

  4. .(点)
任意一个字符

[[email protected] oldboy]# grep “oldb.y”
oldboy.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY!

[[email protected] oldboy]# grep -o “oldb.y”
oldboy.txt     -o只输出文件中匹配到的部分。

oldboy

oldboy

oldbey   

  5.  撬棍
转义字符 脱掉马甲打回原形   

找出文件中以小数点(.)结尾的行

[[email protected] oldboy]# grep -n “.$”
oldboy.txt

2:I teach linux.

6:my qq num is 49000448.

7:not 4900000448.

  6. * 前一个文本连续出现了0次或1次以上

0000

连续出现了0次 就是没有出现

贪婪性—能有多少,显示多少

[[email protected] oldboy]# grep -o “0*”
oldboy.txt

000

00000

7   .* 所有内容
包括空行

(所有) 连续出现的时候
贪婪性

[[email protected] oldboy]# grep “^.*o”
oldboy.txt

I am oldboy teacher!

I like badminton ball ,billiard ball and chinese
chess!

my blog is http://oldboy.blog.51cto.com

8   [abc]
筐 表示一个整体
相当于是一个字符 a或b或c

[[email protected] oldboy]# grep “[a-z]”
oldboy.txt     找小写字母

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinse
chess!

[[email protected] oldboy]# grep “[a-zA-Z]”
oldboy.txt      找大小写的字母

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinse
chess!

9   [^abc] 筐
表示一个整体 排除a或排除b或排除c

[[email protected] oldboy]# grep “[^acb]”
oldboy.txt

1.5.1 grep -v 排除 [^abc]

grep -v 排除行

[^abc] 字符
文字

1.5.2 练习1:以大写字母开头的行

[[email protected] oldboy]# 
grep “^[A-Z]” oldboy.txt

1.5.3 练习2:以小写字母结尾的行

[[email protected]
oldboy]# grep “[a-z]$” oldboy.txt

1.5.4 练习3:以 m或n或o开头的 并且以  m或g 结尾的行

[[email protected] oldboy]# grep “^[mon].*[mg]$”
oldboy.txt

1.5.5 小结

  特殊符号-通配符-基础正则表达式

1.特殊符号

&&  >>  
>  / $ .   ..  ~  |   !  #

2.通配符* {} 

3.正则

1)按照一行

2)^ $ ^$ 
.*  []

1.6 扩展正则表达式

1.6.1  + 前一个字符连续出现了一次或一次以上

连续出现 — 重复

[[email protected] oldboy]# egrep  “0+” oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[[email protected] oldboy]# egrep -o  “0+” oldboy.txt

000

00000

补充:

grep -o grep命令每次找到的东西,grep执行过程 但是不会显示空行

1.6.2 取出文件中连续出现的大写字母取出来

[[email protected] data]# egrep -o “[A-Z]+”
oldboy.txt

I

I

I

OLDBOY

[[email protected] data]# egrep -o “[A-Z]{2,6}”
oldboy.txt

OLDBOY

1.6.3  | 或者

[[email protected] data]# egrep “oldboy|oldbey”
oldboy.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY!

1.6.4  () 小括号里面的内容是一个整体 相当于是一个字符 反向引用

[[email protected] data]# egrep “oldb(o|e)y”
oldboy.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY!

1.6.5 反向引用

  1. 先把你要的内容保护起来 …(你要的内容)…
  2. 在使用 1 2 3

[[email protected] data]# echo 123456 |sed -r
‘s#..(..)..#1#g’

34

1.6.6  {}   0{n,m}取出0连续出现最少n次,最多m次

[[email protected] data]# egrep “0{2,3}”
oldboy.txt

my qq num is 49000448.

not 4900000448.

[[email protected] data]# egrep “0{2,4}”
oldboy.txt

my qq num is 49000448.

not 4900000448.

 取出文件中连续出现3-6次的字母 

[[email protected] data]# egrep “[a-zA-Z]{3,6}”
oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball an chinese
chess!

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

1.6.7 ? 前一个字符连续出现了 0次或1次

[[email protected] data]# cat a.log

good

gd

god

goood

[[email protected] data]# egrep “gd|god” a.log

gd

god

[[email protected] data]# egrep “go?d” a.log

gd

god

1.6.8 小结

基础正则

^   $  ^$   .*  [abc] 
[a-z]  [^abc]

扩展正则表达式

 + | () {} ?

基础正则与扩展正则

egrep   
sed -r    awk

本博文中所使用的系统版本为: CentOS release 6.9 (Final) 内核版本为: 2.6.32-696.10.1.el6.x86_64 linux正在持续学习中,如有雷同请见谅!!!

发表回复

您的电子邮箱地址不会被公开。