[正则] 零宽断言的练手

本文通过具体案例展示了如何使用正则表达式从错误日志中提取RPM软件包的完整路径,并详细解释了正则表达式的各个组成部分及其作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# cat list
Worker 0: error: /repo/rhel-7-server-optional-rpms/Packages/NetworkManager-libnm-devel-1.0.6-27.el7.i686.rpm: headerRead failed: hdr blob(142880): BAD, read returned 0
Worker 1: Error: Could not open local rpm file: /repo/rhel-7-server-optional-rpms/.//Packages/texlive-listings-doc-svn15878.1.4-38.el7.noarch.rpm: RPM Error opening Package


目的是匹配出rpm包的完整路径:
/repo/rhel-7-server-optional-rpms/.//Packages/texlive-listings-doc-svn15878.1.4-38.el7.noarch.rpm


这里使用正则里面的零宽断言练练手


cat list  |grep -oP '(?=/repo)[\w/\.-]+(?<=\.rpm)' |xargs rm -rf


这里分析下关键的正则部分:


1. (?=/repo) --> 匹配之后是”/repo“的位置。

强调下这里是位置,不是字符。

实际效果是匹配到了下面部分:

Worker 0: error: (匹配到这个位置!)/repo/ .....


2. [\w/\.-]+  --> 匹配rpm包的路径。
这里要强调下”-“。这里我把它放在最后,所以不用在它前面加转义符。
如果你把"-"放中间,必须加转义符,否则会报错。
如下所示:
[\w/\-\.]+  ("-"前面加了转义符)


原因其实很简单:因为"-"还有种用法,比如”a-c“,代表abc。你必须加转义符来区分。


3. (?<=\.rpm) --> 匹配之前是".rpm"的位置
也就是匹配下列位置
el7.i686.rpm(匹配这个位置): headerRead
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值