当前位置:  编程技术>其它

Linux 正则表达式详解

    来源: 互联网  发布时间:2014-10-18

    本文导语:  一.linux文本查找命令 在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令: 1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。 2.egrep : 扩展式grep,其使用扩展式正规表达式(E...

一.linux文本查找命令

在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:

1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。

2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。

3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。

如下简单的介绍grep命令:

语法格式:

grep [options ...] pattern-spec [files ...]

用途:

匹配一个或多个模式的文本行。

options:

-E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。

-F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。

-e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。

  模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。

-f : 从pat-file文件读取模式作为匹配。

-i : 模式匹配时忽略大小写差异。

-l : 列出匹配模式的文件名称,而不是打印匹配的行。

-q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。

-s : 不显示错误信息,通常与-q并用。

-v : 显示不匹配模式的行。

说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。

可以使用多个-e 或 -f 选项,建立要查找的模式列表。

二.正则表达式简要介绍

1.正则表达式的组成

(1).一般字符:没有特殊意义的字符

(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义

2.如下讲下正则表达式中的常见meta字符

(1).POSIX BRE与ERE中都有的meta字符:

   :  通常用于打开或关闭后续字符的特殊含义,如(...)与{...}

.   :   匹配任何单个字符(除NUL)

*  :   匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度

^  :   匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义

$  :   匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义

[]  :   匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,

(2).POSIX BRE中才有的字符:

{n,m} : 区间表达式,匹配在它前面的单个字符重现的次数区别。{n}指重现n次;{n,m}指重现n至m次;

( ) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如(ab).*1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。

n : 重复在(与)方括号内第n个子模式至此点的模式。

(3).POSIX ERE中才有的字符:

{n,m} : 与BRE的{n,m}功能相同

+ : 匹配前面正则表达式的一个或多个扩展

? : 匹配前面正则表达式的零个或一个扩展

| : 匹配|符号前或后的正则表达式

( ) : 匹配方括号括起来的正则表达式群

(4). 方括号([])表达式

4.1.字符集  [:  :]

标识字符集,有如下几种:

[::alnum] : 数字字符 [:digit:] : 数字字符 [:punct:] : 标点符号字符 [:alpha:] : 字母字符 [:graph:] : 非空格字符  [:space:] : 空格字符 [:blank:] : 空格与定位字符 [:lower:] : 小写字母字符 [:upper:] : 大写字母字符 [:cntrl:] : 控制字符 [:print:] : 可显示的字符 [:xdigit:] : 16进制数字

 4.2.排序符号

指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号

4.3.等价字符

认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。

说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。

例 : [[:alpha:]!] : 匹配任一英文字母或感叹号。

        [[.ch.] : 匹配ch排序元素,而不匹配单独的字母c或h.

 3.简单正规表达式匹配案例

china  :  匹配此行中任意位置有china字符的行

^china : 匹配此以china开关的行

china$ : 匹配以china结尾的行

^china$ : 匹配仅有china五个字符的行

[Cc]hina : 匹配含有China或china的行

Ch.na : 匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行

Ch.*na : 匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符

二.实例

如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:

www.baidu.com
http://www.baidu.com
https://www.baidu.com
http://wwwbaiducom
baidu.com
baidu

1.url匹配

匹配以http或者https开头,并且其后为:并且含有.的串

BRE匹配:

grep '^https{0,1}.*..*' url.txt

ERE匹配:

grep -E '^https?.*..*' url.txt

匹配结果如下:

http://www.baidu.com
https://www.baidu.com

2.Email匹配

示例文件内容为:

hfutwyy@qq.com
aaaa@
aaa@.com
aaa@gmail.com

@@baidu.com

匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.号

grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*..*' email.txt

 匹配结果:

hfutwyy@qq.com
aaa@.com
aaa@gmail.com

先到这里,后续再接着写。


    
 
 

您可能感兴趣的文章:

  • Linux c++ boost库正则表达式用法
  • linux下有什么函数可以处理正则表达式?
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • linux 正则表达式
  • linux grep 正则表达式 求解释
  • Linux find命令的搜索路径可否使用正则表达式
  • 请问linux下有哪些轻量级的正则表达式库,我在一个应用中使用
  • LINUX正则表达式 空格问题
  • LINUX SHELL 正则处理汉字 问题
  • windows与linux 路径正则写法
  • linux如何匹配正则表达式
  • linux shell正则的一个问题
  • 100分求助linux下与grep有关的正则表达式匹配问题
  • 麻烦解释一下Linux下正则表达式元字符( )的意思?
  • 关于LINUX下面AWK的正则表达式,求解答,在线等
  • 问个linux shell正则表达式子的问题
  • 问两个linux c的正则表达式语法问题:贪婪模式和位置指定
  • linux 正则表达式深度解析
  • linux shell 正则表达式(BREs,EREs,PREs)差异比较
  • 关于linux下的正表达式
  • linux正侧表达式过滤的问题
  • 我如何能得到字符串中的关系表达式运算后的值?(linux 下,用 c++)
  • linux shell中 if else以及大于、小于、等于逻辑表达式介绍
  • linux shell 逻辑运算符、逻辑表达式详细介绍
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux/centos/redhat下各种压缩解压缩方式详解
  • linux 2.4 内核软中断详解?
  • linux c malloc函数定义及用法详解
  • 大家推荐几本详解Linux或unix 操作系统源代码的书籍!!!!
  • linux下进程占用内存空间详解
  • 哪有LINUX命令详解下??
  • Linux下NFS服务配置详解
  • 如何在Linux下使用脚本实现程序的自动重启!望各位详解!
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • 求linux kernel 2.6.30详解
  • SSL握手通信详解及linux下c/c++ SSL Socket代码举例
  • 读了tcpip详解后有问题,上边的源码是linux哪个版本的?
  • linux top命令详解以及top命令的各项使用技巧详细说明
  • 哪有linux源码的详解?
  • linux经常用到的命令详解
  • 第一次安装linux,提示找不到硬盘驱动,求详解!
  • linux加入windows域 是什么意思?求详解,加入后的效果是怎么样的
  • 求《LINUX设备驱动开发详解》电子版
  • 解析Linux系统中JVM内存2GB上限的详解
  • 求linux下 ./configure;make;make install一系列命令的详解
  • linux c 查找使用库的cflags与libs的方法详解
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3