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

问题描述 投票:0回答:1

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

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

bash grep wildcard
1个回答
2
投票

忘记你曾经听说过-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/' {} +
© www.soinside.com 2019 - 2024. All rights reserved.