Grep模式匹配的正则表达式
2011-04-16 00:22
260 查看
最近工作中,需要在系统启动之后查看媒体相关的安装包版本信息,每周两三次需要使用下面的命令行:
rpm -qa | grep gst -- 查看Gstreamer安装包版本信息
rpm -qa | grep audio -- 查看Audio相关安装包版本信息
rpm -qa | grep video -- 查看Video相关安装包版本信息
rpm -qa | grep tracker -- 查看Traker安装包版本信息
当然也可以使用zypper se命令来搜索含有这些关键字的安装包版本信息;然而在报告中附上安装包版本信息还是rpm -qa的输出格式更好。
从以上几个命令行来看,就是要从rpm -qa命令的输出结果中,搜索出含有gst, audio, video, tracker等关键字的行,也就是相关安装包的名称及版本信息。这几行命令,单独执行时,输出结果还有部分重合的,因为含有多个关键字的行会出现在多个命令的结果中;同时,多次执行rpm -qa还会增加时间消耗和风险,最典型的风险是,大家协同工作在一台设备上时,可能要安装或者卸载一些安装包,顺序多次执行rpm -qa可能产生不同的结果,因为它们是不同时刻系统全部安装包的快照。
这里,我想一定可以找到一个模式匹配的整则表达式,一次性搜索出至少含有一个关键字的行,无重复地给出安装包版本信息。那么这个模式匹配正则表达式会是啥样子的呢?
=============================
上面这个问题是我不了解grep命令的模式使用,想多了呢;然而仍保留于此,以示不学无术的后果。
参考《Grep学习笔记》,使用a|b|c模式,来匹配a或b或c,应该就可以了。命令行是:
rpm -qa | grep gst|audio|video|tracker | sort
写到这里想到,shell不会将中间三个竖线解析为管道命令吧,要是那样的话,就变“洗具”为“杯具”了呢。结果如何,下周试验便知。再读《Grep学习笔记》,似乎这个命令行该是:
rpm -qa | grep 'gst|audio|video|tracker' | sort
=============================
验证后发现,以上两个命令行都存在问题,第一个命令行,Shell确实将竖线解析为管道命令,而第二个命令行,没有任何结果显示,查看grep的帮助文档得知,shell将正则表达式解析为一个模式。正确的命令行是:
rpm -qa | grep -E 'gst|audio|video|tracker' | sort
此处,-E表示其后所跟着的模式是扩展的正则表达式。至此,解决了我所遇到的问题。
rpm -qa | grep gst -- 查看Gstreamer安装包版本信息
rpm -qa | grep audio -- 查看Audio相关安装包版本信息
rpm -qa | grep video -- 查看Video相关安装包版本信息
rpm -qa | grep tracker -- 查看Traker安装包版本信息
当然也可以使用zypper se命令来搜索含有这些关键字的安装包版本信息;然而在报告中附上安装包版本信息还是rpm -qa的输出格式更好。
从以上几个命令行来看,就是要从rpm -qa命令的输出结果中,搜索出含有gst, audio, video, tracker等关键字的行,也就是相关安装包的名称及版本信息。这几行命令,单独执行时,输出结果还有部分重合的,因为含有多个关键字的行会出现在多个命令的结果中;同时,多次执行rpm -qa还会增加时间消耗和风险,最典型的风险是,大家协同工作在一台设备上时,可能要安装或者卸载一些安装包,顺序多次执行rpm -qa可能产生不同的结果,因为它们是不同时刻系统全部安装包的快照。
这里,我想一定可以找到一个模式匹配的整则表达式,一次性搜索出至少含有一个关键字的行,无重复地给出安装包版本信息。那么这个模式匹配正则表达式会是啥样子的呢?
=============================
上面这个问题是我不了解grep命令的模式使用,想多了呢;然而仍保留于此,以示不学无术的后果。
参考《Grep学习笔记》,使用a|b|c模式,来匹配a或b或c,应该就可以了。命令行是:
rpm -qa | grep gst|audio|video|tracker | sort
写到这里想到,shell不会将中间三个竖线解析为管道命令吧,要是那样的话,就变“洗具”为“杯具”了呢。结果如何,下周试验便知。再读《Grep学习笔记》,似乎这个命令行该是:
rpm -qa | grep 'gst|audio|video|tracker' | sort
=============================
验证后发现,以上两个命令行都存在问题,第一个命令行,Shell确实将竖线解析为管道命令,而第二个命令行,没有任何结果显示,查看grep的帮助文档得知,shell将正则表达式解析为一个模式。正确的命令行是:
rpm -qa | grep -E 'gst|audio|video|tracker' | sort
此处,-E表示其后所跟着的模式是扩展的正则表达式。至此,解决了我所遇到的问题。
相关文章推荐
- 浅析正则表达式模式匹配的 String 方法
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- SQL中常用模糊查询的四种匹配模式&&正则表达式
- SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易
- mysql模式匹配和正则表达式
- Javascript中正则表达式的全局匹配模式分析
- 浅谈php正则表达式中的非贪婪模式匹配的使用
- Perl正则表达式之模式匹配
- 正则表达式模式匹配的String方法
- java正则表达式匹配模式[贪婪型、勉强型、占有型]
- 正则表达式全局匹配模式(g修饰符)
- JS中正则表达式只有3种匹配模式(没有单行模式)详解
- js中使用正则表达式(五)特殊字符、匹配模式、捕获组与反向引用介绍
- 正则表达式二匹配多个正则表达式模式
- 正则表达式模式匹配字符串基础知识
- 正则表达式的3种匹配模式[转]
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 正则表达式与模式匹配
- 正则表达式贪婪模式及最短匹配
- 正则表达式的3种匹配模式