linux基础学习-10.3-正则表达式详解

一、正则表达式 RE regular expression

1、什么是正则 为何用它?

你可以通过什么方法选出这里面的身份证号码。

440304199604012792

130528197108126121

3605sss98304033896

342923198310042132

1404ddddddddd5694X

61242619860416291X

5002xxxxxx04279521

330900199806382320

654126197703092303

131127197105115662

数字与X(在最后一位)

通过符号匹配查找出各种文字。

正则表达式通过特殊符号 ^ $ [] . * 表示各种各样的文字。

方便我们处理文本(日志)。

2、正则使用范围

谁可以使用正则?

三剑客正则(grep sed awk )

python java

3、正则表达式与通配符区别

正则-----在文件中进行过滤(查找文件内容) 三剑客支持

通配符---找出文件(文件名) 大部分命令都可以使用

4、使用正则注意事项

1) 正则默认是按照行为单位处理。

2) 一定要注意不要使用中文符号。

. ‘‘""^ `` ( ) {} [] <>

。‘’“”……??( ){}【】《》

3) 给grep/egrep加上别名

cat >>/etc/profile<<EOF

alias grep=‘grep --color=auto‘

alias egrep=‘egrep --color=auto‘

EOF

source /etc/profile

5、正则分类

基础正则: ^ $ . * []

扩展正则: + | () {} ?

基本正则 grep sed

扩展的正则 egrep sed -r awk

适合linux三剑客

以行为单位处理

cat >>/etc/profile<<EOF

alias egrep=‘egrep --color=auto‘

alias grep=‘grep --color=auto‘

EOF

source /etc/profile

export LC_ALL=C

测试文件

cat >>~/test/oldboy.log<<EOF

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog ishttp://oldboy.blog.51cto.com

our site ishttp://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

gd

good

god

goood

gooood

oldboy1

EOF

二、基础正则

基础正则(BRE)第一波字符说明

1、 ^word 匹配开头word

2、 word$ 匹配word结尾

3、 ^$ 匹配开头结尾 即空行

[[email protected] test]# grep "^m" oldboy.log

my blog ishttp://oldboy.blog.51cto.com

my qq num is 49000448.

my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep "m$" oldboy.log

my blog ishttp://oldboy.blog.51cto.com

[[email protected] test]# grep -n "^$" oldboy.log

3:

8:

[[email protected] test]# grep "^m" oldboy.log

my blog ishttp://oldboy.blog.51cto.com

my qq num is 49000448.

my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep -n "^$" oldboy.log

3:

8:

[[email protected] test]# grep "oldboy" oldboy.log

I am oldboy teacher!

my blog ishttp://oldboy.blog.51cto.com

[[email protected] test]# grep "oldb.y" oldboy.log

I am oldboy teacher!

my blog ishttp://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep "oldb.y" oldboy.log -o

oldboy

oldboy

oldbey

[[email protected] test]# grep ".$" oldboy.log

I teach linux.

my qq num is 49000448.

not 4900000448.

基础正则(BRE)第二波字符说明

. 代表且只能代表任意一个字符

转译符号,特殊字符还原本意

\n 表示换行

\n 在 echo sed awk 中使用

* 匹配前面的一个字符0次或多次(任意多次)

.* 匹配任意一个字符任意多次(任意字符串)

^.* 匹配开头任意字符串

[[email protected] test]# grep "^.*o" oldboy.log

I am oldboy teacher!

I like badminton ball ,billiard ball and chinese chess!

my blog ishttp://oldboy.blog.51cto.com

our site ishttp://www.etiantian.org

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

说明:如果匹配的内容在一行中有多处,grep会从左到右匹配到最后一个,多多益善

提示:点(.)的特殊含义小结:

1、当前目录

2、使得文件生效相当于source

3、隐藏文件的开头

4、任意一个字符

[[email protected] test]# grep -n "." oldboy.log

2:I teach linux.

5:my blog ishttp://oldboy.blog.51cto.com

6:our site ishttp://www.etiantian.org

7:my qq num is 49000448.

9:not 4900000448.

[[email protected] test]# grep -n "." oldboy.log

1:I am oldboy teacher!

2:I teach linux.

4:I like badminton ball ,billiard ball and chinese chess!

5:my blog ishttp://oldboy.blog.51cto.com

6:our site ishttp://www.etiantian.org

7:my qq num is 49000448.

9:not 4900000448.

10:my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep -n ".*" oldboy.log

1:I am oldboy teacher!

2:I teach linux.

3:

4:I like badminton ball ,billiard ball and chinese chess!

5:my blog ishttp://oldboy.blog.51cto.com

6:our site ishttp://www.etiantian.org

7:my qq num is 49000448.

8:

9:not 4900000448.

10:my god ,i am not oldbey,but OLDBOY!

基础正则(BRE)第三波字符说明

[abc] 匹配a、b、c任意一个字符

[^abc] 匹配非a、非b、非c 任意一个字符

a{n,m} 匹配a这个字符 n到m次

a{n,} 匹配a这个字符至少n次

a{n} 匹配a这个字符n次

a{,m} 匹配a这个字符最多m次

注意: 上面的 是转义 ,但是在 egrep (grep -E) 或 sed -r 或 awk {} 不需要转义

[[email protected] test]# grep -n "[abc]" oldboy.log

1:I am oldboy teacher!

2:I teach linux.

4:I like badminton ball ,billiard ball and chinese chess!

5:my blog ishttp://oldboy.blog.51cto.com

6:our site ishttp://www.etiantian.org

10:my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep -n "[^abc]" oldboy.log

1:I am oldboy teacher!

2:I teach linux.

4:I like badminton ball ,billiard ball and chinese chess!

5:my blog ishttp://oldboy.blog.51cto.com

6:our site ishttp://www.etiantian.org

7:my qq num is 49000448.

9:not 4900000448.

10:my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep -n "[a-Z0-9]" oldboy.log

1:I am oldboy teacher!

2:I teach linux.

4:I like badminton ball ,billiard ball and chinese chess!

5:my blog ishttp://oldboy.blog.51cto.com

6:our site ishttp://www.etiantian.org

7:my qq num is 49000448.

9:not 4900000448.

10:my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep -n "^[abc]" oldboy.log

[[email protected] test]# grep -n "[^abc]" oldboy.log

1:I am oldboy teacher!

2:I teach linux.

4:I like badminton ball ,billiard ball and chinese chess!

5:my blog ishttp://oldboy.blog.51cto.com

6:our site ishttp://www.etiantian.org

7:my qq num is 49000448.

9:not 4900000448.

10:my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep -n "^[^abc]" oldboy.log

1:I am oldboy teacher!

2:I teach linux.

4:I like badminton ball ,billiard ball and chinese chess!

5:my blog ishttp://oldboy.blog.51cto.com

6:our site ishttp://www.etiantian.org

7:my qq num is 49000448.

9:not 4900000448.

10:my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep "[^a-z]" oldboy.log

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog ishttp://oldboy.blog.51cto.com

our site ishttp://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep "[^0-9]" oldboy.log

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog ishttp://oldboy.blog.51cto.com

our site ishttp://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep "[^0-9]" oldboy.log

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog ishttp://oldboy.blog.51cto.com

our site ishttp://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep -v "[0-9]" oldboy.log

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

our site ishttp://www.etiantian.org

my god ,i am not oldbey,but OLDBOY!

[[email protected] test]# grep "[0-9]" oldboy.log

my blog ishttp://oldboy.blog.51cto.com

my qq num is 49000448.

not 4900000448.

[[email protected] test]# grep "0{2,3}" oldboy.log

my qq num is 49000448.

not 4900000448.

[[email protected] test]# grep -o "0{2,3}" oldboy.log

000

000

00

[[email protected] test]# grep "0{1,5}" oldboy.log

my qq num is 49000448.

not 4900000448.

[[email protected] test]# grep -o "0{1,5}" oldboy.log

000

00000

[[email protected] test]# egrep "0{1,5}" oldboy.log

my qq num is 49000448.

not 4900000448.

[[email protected] test]# egrep -o "0{1,5}" oldboy.log

000

00000

三、扩展正则

. 匹配前面一个字符一次或多次

a+ 匹配a这个字符一次或多次

? 匹配前面一个字符0次或1次

a? 匹配a这个字符0次或1次

| 表示或者 用于同时过滤多个

( ) 分组 后向引用

egrep "0+" oldboy.txt

egrep -o "0+" oldboy.txt

egrep -o "[a-z]+" oldboy.txt

egrep "[a-z]+" oldboy.txt

egrep -o "[a-z]+" oldboy.txt

egrep -o "[a-zA-Z]+" oldboy.txt

egrep -o "[a-Z]+" oldboy.txt

[[email protected] test]# egrep "go?d" oldboy.log

my god ,i am not oldbey,but OLDBOY!

gd

god

[[email protected] test]# egrep "go+d" oldboy.log

my god ,i am not oldbey,but OLDBOY!

good

god

goood

gooood

[[email protected] test]# egrep "go*d" oldboy.log

my god ,i am not oldbey,but OLDBOY!

gd

good

god

goood

gooood

[[email protected] test]# egrep "go{0,3}d" oldboy.log

my god ,i am not oldbey,but OLDBOY!

gd

good

god

goood

[[email protected] test]# dumpe2fs /dev/sda1 |grep -i "inode size"

dumpe2fs 1.41.12 (17-May-2010)

Inode size: 128

[[email protected] test]# dumpe2fs /dev/sda1 |grep -i "block size"

dumpe2fs 1.41.12 (17-May-2010)

Block size: 1024

[[email protected] test]# dumpe2fs /dev/sda1 |grep -i "inode count"

dumpe2fs 1.41.12 (17-May-2010)

Inode count: 51200

[[email protected] test]# dumpe2fs /dev/sda1 |grep -i "block count"

dumpe2fs 1.41.12 (17-May-2010)

Block count: 204800

Reserved block count: 10240

[[email protected] ~]# echo "##**##@@##@##*#[email protected]@@@@@@2**@@@**##**" |egrep "[#@*]+"

##**##@@##@##*#[email protected]@@@@@@2**@@@**##**

[[email protected] ~]# echo "##**##@@##@##*#[email protected]@@@@@@2**@@@**##**" |egrep "[#@*]+" -o

##**##@@##@##*#

@@@@@@@

**@@@**##**

[[email protected] test]# egrep "oldb(o|e)y" oldboy.log

I am oldboy teacher!

my blog ishttp://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY!

oldboy1

[[email protected] test]# dumpe2fs /dev/sda1 |egrep -i "(inode|block) size"

dumpe2fs 1.41.12 (17-May-2010)

Block size: 1024

Inode size: 128

[[email protected] test]# dumpe2fs /dev/sda1 |egrep -i "(inode|block) count"

dumpe2fs 1.41.12 (17-May-2010)

Inode count: 51200

Block count: 204800

Reserved block count: 10240

[[email protected] test]# dumpe2fs /dev/sda1 |egrep -i "(inode|block) (size|count)"

dumpe2fs 1.41.12 (17-May-2010)

Inode count: 51200

Block count: 204800

Reserved block count: 10240

Block size: 1024

Inode size: 128

练习题:

1、什么是正则及正则的作用?

2、基础正则的相关符号

3、扩展正则的相关符号

原文地址:https://www.cnblogs.com/Klanti/p/9143248.html

时间: 2024-08-13 19:40:46

linux基础学习-10.3-正则表达式详解的相关文章

linux基础学习-10.4-正则表达式练习题

一.基础正则 环境准备 [[email protected] oldboy]# cat /oldboy/re.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 size is http://blog.oldboyedu.com my qq is 49000448 not

java基础学习——4、集合类详解

一.Java集合框架图 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等. 发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法. 它的一个子接口Lin

Linux grep 命令中的正则表达式详解

在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expressions),而且 GNU grep 在所有的 Linux 系统中都是默认有的.Grep 命令被用于搜索定位存储在您服务器或工作站上的任何信息. 正则表达式 正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.下面是范例: ^w1 w1|w2 [^ ] grep 正则表达式示例 在 /e

linux基础篇-17,find命令详解

文件查找: locate:非实时查找,模糊匹配,查找根据全系统文件数据库进行,速度快 updatedb:手动生成文件数据库 find:实时,准确,支持众多查找标准,遍历指定目录中的所有文件完成查找,书店慢 find 查找路径 查找标准 查找到一行的处理动作 查找路径:默认为当前目录 查找标准:默认为指定文件下的所有文件 处理动作:默认为显示 匹配标准:-name 'filename':对文件名做精确匹配 文件名通配:"" * ? [] -iname filename:文件名匹配不区分大

linux基础--包管理工具yum详解

rpm常用命令 安装 -ivh:安装rpm包 --nodeps:忽略依赖关系强制安装 --replacepkg:无论软件包是否已被安装,都强行安装软件包 卸载 -e:卸载rpm包 --nodeps:忽略依赖关系强制卸载 升级 -Uvh:升级软件包--Update -Fvh:只有安装在系统上的包才会升级 --nodeps:忽略依赖关系升级 查询 -q:查看安装包名称 -qa:查看是否安装指定rpm包 -qf:查找指定文件属于哪个RPM软件包 -qi:查看安装包的详细信息 -qc:查看安装包的配置文

linux基础--awk文本分析工具详解

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK

Linux基础知识之echo命令详解

echo命令 功能:显示字符 语法:echo [-neE][字符串] 说明:echo 会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开,  并在最后加上换行号 echo "$VAR_NAME":  变量会替换,双引号表弱引用 echo '$VAR_NAME':  变量不会替换,强引用 $echo –e "Enter the file name: \c" echo  需要使用-e  参数来打印转义字符. echo命令选项: -n:不在字符的最后,自动换行 -

linux命令学习笔记:cut详解

cut命令从文件的每一行剪切字节.字符和字段并将它们写至标准输出.它是以文件的每一行作为处理对象的. 命令格式:cut [选项] [范围] 文件.选项用来指定单位(字节.字符还是字段),范围指定选项的位置. 常用的选项有: -b:指定以字节为单位显示选中内容 -c:指定以字符为单位显示选中内容 -f:指定以字段为单位显示选中内容 -d:指定字段的分界符,默认为制表符 其它的选项还有-n(仅和-b选项一起使用).-s(仅和-f选项一起使用) 范围表示: n:第n个字节/字符/字段 n-:从第n个字

linux基础学习-10.2-通配符回顾

1. * 所有 任何东西 以.txt结尾 *.txt 以.log结尾 *.log 系统中以ls开头的文件. find / -type f -name "ls*" 找出系统中文件名包含oldboy的文件. find / -type f -name "*oldboy*" 2.{} 生成序列 echo {1..10} echo {10..1} echo {01..10} echo {01..100} echo {a..c} echo {a..z} echo {A..Z}