排除包含字符串'x'的通配符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排除包含字符串'x'的通配符相关的知识,希望对你有一定的参考价值。

有没有办法修改egrep -rha 'part1.*part2'添加类似的东西:“如果.*包含(不一定等于)string_x然后模式不匹配”​​?问题是string_x存在于每一行,所以我不能-v它。在模式之前或之后有这个字符串是可以的,而不是在它的中间。

我假设双.*not string_x之间将完成工作,但它将花费很多时间,加上我有时使用.{n,m}通配符,在这种情况下,它将加倍所需的通配符长度。每次在part2之前遇到string_x时,也许某种搜索终止?

答案

忘记你曾经听说过-r或让grep找到档案的任何其他选择。有一个非常好的工具,用于查找名称非常明显的文件 - find。保持grep的优势在于做g/re/p。我无法想象当他们决定提供grep选项来查找文件时,GNU的人吸烟了什么,但希望他们现在不打算添加选项来排序文件或从网站提取内容或打印流程数据或做其他事情现有的工具做得非常好!

在这种情况下,你正在寻找的不仅仅是g/re/p,所以你应该使用awk:

awk '/part1.*part2/ && !/part1.*string_x.*part2/'

所以完整的脚本就像(未经测试,因为没有提供样本输入/输出):

find . -type f -exec awk '/part1.*part2/ && !/part1.*string_x.*part2/' {} +

以上是关于排除包含字符串'x'的通配符的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode No.44 通配符匹配

LintCode (192)通配符匹配

在SQL中使用select语句时

如何模糊查找姓李的SQL语句

Elasticsearch上的短语和通配符查询

Ant风格路径匹配的通配符