正则表达式及其用法

正则表达式及其用法

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

相关推荐

  • TCP 的那些事儿(上)

       TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另…

    Linux干货 2015-04-01
  • man命令的用法

    man 命令的用法    在linux运维工作中,经常会有一些命令我们不是很清楚它们的准确用法,这时候我们就需要去查询这些命令的用法,linux中就有很多文档帮助我们去了解这些命令的用法,其中就有一条命令man,下面我就总结一下它的用法。     man 是 manual 的简写,提供命令的帮助文件。   &…

    Linux干货 2017-02-17
  • centos6.9的安装

    先准备一个安装虚拟机的的软件VMware Workstation Pro和光盘centos6.9和光盘 然后打开该软件,点击创建新的虚拟机   然后会出现一个新建虚拟机向导,选择典型,点下一步 继续点下一步   把虚拟机名称改成所装的版本 然后新建一个文件夹,点击浏览,接着点击这个新建的文件夹,这个文件夹就是虚拟机所装入的位置,…

    2017-07-15
  • Linux进程管理

    一:进程的概念     1)进程:process,运行中的程序的一个副本的某部分,之所以说是副本的一部分是因为一个程序可以多个用户同时以不同格式运行,如两个用户都在运行ls,一个运行的是ls -h ,另一个运行的是ls -l,那么这两个用户运行的程序代码肯定是不一样的而且不是程序的所有代码;进程有生命周期; &nbsp…

    2017-03-26
  • Linux Shell(脚本)编程入门

    为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建…

    Linux干货 2017-08-05
  • 基于Keepalived构建高可用集群配置实例(HA Cluster)

    什么是集群 简单的讲集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。 关于更详细的高可用集群我们在后面再做详解…

    Linux干货 2016-11-03