linux下关于正则表达式grep的一点总结_正则表达式

来源:脚本之家  责任编辑:小易  

把 grep 要匹配的内容用双引号或者单引号括起来,比如 ls-la|grep"m*xls-la|grep"m1\\{1,3\\}x否则bash会按照自己的方式(文件通配符替换)去替换*,.等符号。这样真正传入grep的并不是你看到的 m*x等,而是已经被bash替换后的内容www.zgxue.com防采集请勿采集本网。

正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。类似于生活中常见的寻人启示,通过描述一个人的特征来进行“搜索匹配”

1、标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数

如今正则已经被我们广泛应用,目前被集成到了各种文本编辑器/文本处理工具当中

[seesea2517~]$cat file.txt logo={ baseAddr=0x80ec0000,endAddr=0x80f00000 }, 得到第一个 [seesea2517~]$sed-r\"s/.*baseAddr=([^]*).*/\\1/\"file.txt 0x80ec0000 得到第二个 [seesea2517~]$sed-r\"s/.*

应用场景**验证: **表单提交时,进行用户名密码验证。**查找: **从大量信息中快速提取指定内容。在一批url中,查找指定url替换: 将指定格式的文本,进行正则匹配查找,找到之后进行特定替换,(vim文本替换等)

它是一个字符匹配标准,一些命令工具按此标准实现字符匹配,根据命令支持的匹配功能可分为基础正则表达式和扩展正则表达式,常用于支持正则表达式的工具,如sed,grep,awk. 有如下一些常用的匹配元字符:

在很多技术领域(比如,自然语言处理,数据存储等),正则表达式可以很方便的提取出我们想要的信息,所以这部分必不可少构成基本要素字符类数量限定符位置限定符特殊符号

分隔符使用正则,在awk的-F参数后可以直接使用正则表达式 表示能够匹配的都当做分隔符;awk中设置 其他分隔符 如FS、RS等也可以使用正则 字符串函数中使用正则。如split(s,a,fs)在fs上将s分成序列a,其中

1. 字符类:

字符 说明 举例
. 匹配任意的一个字符 abc. 可以匹配abcd、abc0等
[] 匹配 [] 内的任意一个字符 [012]a可以匹配0a、1a、2a
- 在括号内表示字符范围 如[0-9]可以匹配任何一个数字
^ 放在[]内前面表示匹配除括号中字符外的任意一个字符 [^ab]c可以匹配1c、dc,但是不能匹配ac、bc
[[:xxx:]] grep工具预定义的一些命名字符类 [[:digit:]]可以匹配一个数字,[[:alpha:]]匹配一个字符,[[:lower:]]匹配任何一个小写字母等

只显示数字 \\d+ 只显示字母[a-z]+ 显示数字和字母[0-9a-z]+ 不显示数字[^\\d]+

应用:

grep使用--color选项将匹配的字符串以红色标注出来Linux下可以用echo $?来打印上一条命令执行的退出码,为0表示执行成功,1表示失败。

实验如下:

注意:使用 . 默认为贪心匹配,和后面的正则匹配方式相关,后面再述。

2. 数量限定符:

字符 说明 举例
? 匹配紧跟它前面的单元(前面的一个数字或字符) 0或1次 如匹配小数,用0\.?[0-9]匹配0.1 、0.2、0.3等;由于.在正则里面是特殊符号所以需要用\进行转义操作(后面再说)
+ 匹配紧跟它前面的单元 1或多次 [a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.com匹配一个邮箱地址
* 匹配紧跟它前面的单元0或多次 [0-9][0-9]*匹配至少一位数字,等价于[0-9]+
{N} 精确匹配紧跟它前面的单元N次 [0-9]{3}匹配000到999之间的数字
{N,} 匹配紧跟它前面的单元至少N次 [0-9]{3,}匹配三位及其以上的数字
{,M} 匹配紧跟它前面的单元最多M次 [0-9]{,1}等价于[0-9]?
{N,M} 匹配紧跟它前面的单元N~M次 近似匹配IP地址:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

应用:

3. 位置限定符:

字符 说明 举例
^ 匹配行首位置,从行首开始匹配 ^world只匹配一行开头的world
$ 匹配行末位置,从行末尾开始匹配 ;$匹配一行末尾的;号,^$匹配空行
< 匹配单词开始位置 < th匹配this,不匹配teach、ethernet
\> 匹配单词末尾位置 p\>匹配sleep、leap等,不匹配parent、sleepy
\b 匹配单词的开始位置、末尾位置 \borld匹配world、aorld,\borld\b只匹配orld
\B 匹配非单词的开头、末尾位置 如 \Bat\B匹配battery,不匹配attend、hat等以字符串"at"开头、结尾的单词

注意:其中 \b 用来限定是目标串中是否有以指定字符串开头的单词,我们称之为词界。 \B 称之为非词界

应用:

4. 特殊符号:

字符 说明 举例
\ 转义字符,普通字符转义为特殊字符,特殊字符转义为普通字符 <写成<匹配单词开头,.前面加上\写成\.. 的字面值
() 将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符 ([0-9]{1,3}\.){3}[0-9]{3}匹配IP地址
| 连接两个子表达式,表示或的关系 n(o|either)匹配no或neither

应用:

( )将包含内容括起来作为一个整体,进而通过数量限定符限定。

| 用来级联多个条件,只要有任意一个匹配,即可匹配,表示或者关系,我们称之为析取符

正则表达式版本其他常用通用字符集及其替换

符号 等价于 匹配
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\w [a-zA-Z0-9_] 数字字母下划线
\W [^\w] 非数字字母下划线
\s [_\r\t\n\f] 表格,换行等空白区域
\S [^\s] 非空白区域

于是, 我们现在可以用这些符号来简化我们正则表达式的编写了?试试

可是结果好像并不如我们所愿?其实这里还与正则表达式版本有关。正则分为以下几个版本:

基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)

在grep中指定相应的参数即可,而这几个版本中默认的就是基本正则,带上-E选项就是扩展正则,而带上-P参数就是用perl版正则。解决前面的问题,我们这里让grep带上-P选项便可解决了

版本间区别正则表达式的Extended规范和Basic规范基本相同。只是在Basic规范下,有些字符 ?+{}|() 应解释为普通字符,要表示上述特殊含义则需要加 \ 转义。反之,在Extended规范下, ?+{}|() 应该被理解成特殊含义,要取其字面值,也要对其进行\ \ 转义。所以, grep 工具带上 -E 选项,表示使用扩展正则来进行匹配(亦可直接使用egrep 命令操作),若没有,则表示使用基准正则进行匹配。带-P选项使用的perl正则匹配。它是perl语言集成的最重要的一种特性,它十分强大,很多语言设计正则式支持的时候基本上都参考Perl的正则表达式。正则匹配模式

贪婪模式

正则表达式去匹配时,会尽量多的去匹配符合条件的内容,grep命令 默认使用的就是贪婪匹配,非贪婪模式

正则表达式去匹配时,会尽量少的匹配符合条件的内容 也就是说,一旦发现匹配符合要求,立马就匹配成功,而不会继续匹配下去(除非有g选项,开启下一组匹配)

总结:可以看到,非贪婪模式的标识符,就是贪婪模式的标识符后面加上一个 ?

man bash:翻阅关于bash的用户手册页,查看其相关的功能和描述。将前面的命令输出的内容以后面的命令再处理。col-b:过滤掉所有的控制字符,包括RLF和HRLF(使得显示出来的文本没有乱码)。将前面的命令输出的内容保存到后面所述的文件中。综合起来,就是把bash的用户手册页的内容,去掉乱码(控制字符)之后,输出到当前目录下的bash.txt内。当命令得到执行,则当前目录下会出现一个bash.txt文件,里面的内容正是man手册内关于bash的帮助和介绍内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • linux 正则表达式grep实例分析
  • linux grep与正则表达式使用介绍
  • linux系统用户管理与grep正则表达式示例教程
  • 浅谈linux grep与正则表达式
  • linux grep正则表达式与grep用法详解
  • 密码强度检测函数(正则)
  • php 正则表达式分析rss
  • js中的正则表达式及pattern的注意事项
  • 正则表达式(regex)错误使用导致功能漏洞分析
  • 正则表达式口诀 正则表达式学习工具
  • 利用正则表达式(只录入中文,数字,英文)
  • js:校验ipv6地址的正则表达式
  • 常用的正则表达式实例整理
  • linux 正则表达式深度解析
  • javascript系列文章:详解正则表达式基本知识
  • Linux下的正则表达式,帮忙解释一下
  • Linux正则表达式的问题
  • 求助linux下的正则表达式~
  • Linux正则表达式
  • linux下的C程序,正则表达式怎么表示中文
  • 在linux中如何通过正则表达式提取一行中的特定的十六进制数
  • linux中 正则表达式和通配符的区别
  • Linux系统下如何使用AWK正则表达式
  • linux正则表达式
  • linux正则表达式
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页正则表达式linux 正则表达式grep实例分析linux grep与正则表达式使用介绍linux系统用户管理与grep正则表达式示例教程浅谈linux grep与正则表达式linux grep正则表达式与grep用法详解密码强度检测函数(正则)php 正则表达式分析rssjs中的正则表达式及pattern的注意事项正则表达式(regex)错误使用导致功能漏洞分析正则表达式口诀 正则表达式学习工具利用正则表达式(只录入中文,数字,英文)js:校验ipv6地址的正则表达式常用的正则表达式实例整理linux 正则表达式深度解析javascript系列文章:详解正则表达式基本知识java 正则表达式详解比较正宗的验证邮箱的正则表达式正则表达式匹配任意字符(包括换最新手机号码、电话号码正则表达javascript 手机号码正则表达式验js利用正则配合replace替换指定字正则表达式匹配不包含某些字符串正则中需要转义的特殊字符小结js正则函数match、exec、test、s最全的常用正则表达式大全——包得到连接和图片的地址 正则正则表达式验证ipv4地址功能实例分析windows与linux 路径正则写法java中正则表达式小总结(整理)最全的常用正则表达式大全史上最详细的js日期正则表达式分享学php正则!超基础简单例子java正则表达式彻底研究js 常用正则表达式表单验证代码
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved