[正则] 零宽断言的练手
发布时间:2020-12-14 00:55:25 所属栏目:百科 来源:网络整理
导读:# 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-s
# 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |