正则表达式及其用法

正则表达式及其用法

1.   什么是正则表达式

正则表达式是Global search REgular expression and Print out the line的缩写。是一类用字符所书写的模式,其中许多字符并不表示其字面意义,而是表达控制或通配等功能。

在Linux中,用正则表达式搜索文本的常用命令:

grep: 使用基本正则表达式匹配文本。

egrep:使用扩展正则表达式匹配文本,同: grep –E。

fgrep: 快速grep,不支持正则表达式,不识别元字符。

    语法格式:

      grep [option]… 'PATTERN' FILE…

2.   基本正则表达式

    (1)     字符匹配

(a)  .: 匹配任意单个字符。

(b)  []:匹配指定范围内的任意单个字符。

[0-9] 或[[:num:]]:匹配任意当个数字

[a-z]或[[:lower:]]:匹配任意单个小写字母

[A-Z]或[[:upper:]]:匹配任意一个大写字母

[[:space:]]:匹配空格或制表符

[[:punct:]]:匹配特殊字符

[[:alpha:]]:匹配单个任意字符

[[:alnum:]]:匹配单个字母或数字

(c)  [^]:匹配不包括指定范围内的任意单个字符。

   (2)     次数匹配

a*: 匹配它前面出现的字符任意次。

b\?: 匹配它前面的字符0次或1次。

c\{m\}: 匹配它前面出现的字符m次。

d\{m,n\}: 匹配它前面出现的字符至少m次,至多n次。

e\{m,\}: 匹配它前面出现的字符至少m次。

f\{,n\}: 匹配它前面出现的字符至多n次。

g.*: 匹配任意长度的任意字符.

  (3)     位置锚定

a^: 锚定句首,写在模式的最左面。

b$: 锚定句尾,写在模式的最右端。

c\<: 锚定词首,写在模式的最左面。

d\>: 锚定词尾,写在模式的最右面。

e.* : 空白行

  (4)     分组\(\)

       分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用。

  (5)     引用 \#

引用第#个括号中匹配到的内容,而不是模式本身。

如:\(ab\?c\).*\1    abcmnabc 匹配

3.   扩展正则表达式

  (1)     字符匹配(同基本正则表达式)

(a)  .: 匹配任意单个字符。

(b)  []:匹配指定范围内的任意单个字符。

(c)  [^]:匹配不包括指定范围内的任意单个字符。

  (2)     次数匹配

a*: 匹配它前面出现的字符任意次。

b?: 匹配它前面的字符0次或1次。

c+: 匹配前面出现的字符至少一次。

c{m}: 匹配它前面出现的字符m次。

d{m,n}: 匹配它前面出现的字符至少m次,至多n次。

e{m,}: 匹配它前面出现的字符至少m次。

f{,n}: 匹配它前面出现的字符至多n次。

  (3)     位置锚定 (同基本正则表达式)

  (4)     分组()

  (5)     引用 \# (同基本正则表达式)

  (6)     或者  |

  如:a|b   表示 a或b

      ab|cd 表示 ab或cd

练习:

1.新建一个文本文件,假设有如下内容:

            He like his lover.

            He love his lover.

            He like his liker.

            He love his liker.

        找出其中最后一个单词是由此前某单词加r构成的行。

[root@centos7 ~]# cat ./liker.txt 

He like his lover.

He love his lover.

He like his liker.

He love his liker.

[root@centos7 ~]# grep '\<\(.*\)\>.*\1r' ./liker.txt 

He love his lover.

He like his liker.

[root@centos7 ~]# 

2.写一个模式,能匹配合理的ipv4地址;1.0.0.0-239.255.255.255

[root@centos7 ~]# cat ./ip.txt                       

249.1.0.1

229.2.1111.1

0.0.0.0

255.255.255.255

239.255.255.255

1.0.0.0

1000.0.0.0.0

1.1000.0.0

1.2.2000.0

1.2.3.4000

127.0.1.10

[root@centos7 ~]# grep -o -E '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-3][0-9])((\.)([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}\>' ./ip.txt 

239.255.255.255

1.0.0.0

1.2.3.40

127.0.1.10

[root@centos7 ~]# 

原创文章,作者:浪迹天涯,如若转载,请注明出处:http://www.178linux.com/7969

(0)
上一篇 2015-09-14 09:19
下一篇 2015-09-14 09:21

相关推荐

  • linux 磁盘管理

    1、查看系统存在硬盘:lsblk  2、对磁盘分区操作:fdisk /dev/sda p: 显示当前硬件的分区,包括没保存的改动 n: 创建新分区 e: 扩展分区 p: 主分区 d: 删除一个分区 w: 保存退出 t: 修改分区类型 L:显示所支持的所有类型 3、在CentOS 5和7 使用partprobe同步分区。 4、mkfs -t 文件类型…

    Linux干货 2017-08-13
  • yum安装报错

    我的系统是centos 6.8 x86 安装bind时出错如下: [root@Ams ~]# yum install bind -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from…

    Linux干货 2016-08-02
  • shell脚本编程2

    shell脚本编程2   今天继续学习了shell脚本编程,续之前写的脚本编程1。上次主要学了编程的基础,脚本格式,变量类型及变量的使用,条件测试,数字运算并且进行了部分练习,因为这部分逻辑思维能力要求不是很高,因此记忆起来难度不是特别大。   从今天开始便进入了流程控制以及函数、数组、高级字符串操作、高级变量等内容的学习,总体来说难度和…

    Linux干货 2016-08-16
  • 设计模式(六)桥连模式Bridge(结构型)

    1. 概述       在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度? 例子1:设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的…

    Linux干货 2015-06-26
  • 逻辑卷

    LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性。       LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载…

    Linux干货 2016-09-01
  • Linux基础之—基础权限和特殊权限以及FACL权限管理

    Linux是多用户多任务的操作系统,了解掌握Linux的权限分配机制,也是管理Linux系统安全的基础之一。 文件目录的权限格式如下:   1.其中权限位可以看对象到是一个9个占位符,其实分为三位一组: (1) 第一组:对应的是文件或目录的所有者属主权限。owner (2) 第二组:对应的是文件或目录的所属组权限。group (3) 第三组:对应的…

    Linux干货 2016-08-07