最近工作中,需要在系统启动之后查看媒体相关的安装包版本信息,每周两三次需要使用下面的命令行:
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表示其后所跟着的模式是扩展的正则表达式。至此,解决了我所遇到的问题。