首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带grep的Bash正则表达式否定问题

带grep的Bash正则表达式否定问题
EN

Stack Overflow用户
提问于 2017-03-23 08:35:59
回答 1查看 71关注 0票数 1

对于模式为file_20170321EXPR.tar.gz的文件目录中带有"EXPR“的文件

详情如下:

代码语言:javascript
运行
复制
   12.[3-8]x
   14.[3-8]x
   23.[3-8]x

因此,示例文件名如下:

代码语言:javascript
运行
复制
...
file_2017032312.7a.tar.gz
file_2017032312.8a.tar.gz
file_2017032314.3a.tar.gz
file_2017032314.4a.tar.gz
file_2017032314.5a.tar.gz
file_2017032314.6a.tar.gz
file_2017032323.6a.tar.gz
file_2017032323.7a.tar.gz
file_2017032323.8a.tar.gz
....

有3号-8号文件的地方。当我尝试用grep

代码语言:javascript
运行
复制
ls | grep -E "*[1|2][2|3|4]\.[3-8]x\.tar.\gz$"

我还会收到一些不想要的文件

代码语言:javascript
运行
复制
13.[3-8]x
22.[3-8]x
24.[3-8]x 

所以试着用

代码语言:javascript
运行
复制
ls | grep -E "(*[1|2][2|3|4]\.[3-8]x\.tar.\gz" | grep -Ev "*13|22|24\."

但我将整个正则表达式作为一个参数发送给一个函数。因此需要任何方法将第一个正则表达式本身中的非必需表达式组合起来,如下所示

代码语言:javascript
运行
复制
ls | grep -E "(*[1|2][2|3|4]\.[3-8]x\.tar.\gz$)|!(*13|22|24\.)"

这不起作用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-23 08:48:44

返回13.[3-8]是因为[12][234]匹配13 (以及1214222324)。注意,|被视为文本|,您需要删除它。您需要使用分组构造来只允许必需的值:

代码语言:javascript
运行
复制
ls | grep -E "(1[24]|23)\.[3-8]x\.tar\.gz$"
              ^^^^^^^^^^

(1[24]|23)将只匹配121423

此外,在您的模式中,避免使用点,而不是g

详细信息

-(1[24]|23) --两个选项之一:1214,或(|) 23 - \. --文字点符号-- [3-8] --一个括号表达式匹配3456d29或d30-d31-文字字符序列<>d32- $ -字符串的结尾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42970848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档