【发布时间】:2017-12-23 16:25:33
【问题描述】:
有没有办法修改egrep -rha 'part1.*part2' 以添加类似:“如果.* 包含(不一定等于)string_x 那么模式不匹配”?问题是string_x 存在于每一行中,所以我不能-v 它。在模式之前或之后有这个字符串是可以的,只是不要在它的中间。
我假设将.* 和not string_x 放在它们之间可以完成工作,但这需要很长时间,而且我有时会使用.{n,m} 通配符,在这种情况下,它会加倍所需的通配符长度。每次在第 2 部分之前遇到string_x 时可能会出现某种搜索终止?
【问题讨论】:
-
您可以随时通过管道传递另一个 grep:
grep 'part1.*part2' | grep -v 'part1.*string_x.*part2'。 -
这不是永远吗?
grep -v是否仅在第一个 grep 找到匹配项或所有 toime 时发生? -
为什么永远?它可能是最有效的。第二个
grep只会作用于第一个grep的输出。顺便说一句,没有办法像你提到的那样指定not string_x。 -
因为每个通配符似乎都将搜索时间加倍,大约为 2 分钟,而没有任何通配符。肯定会测试它。如果我不排除字符串而是排除单个字符会更容易吗?
-
如果你想排除一个字符,它可能会更快:例如如果你想排除
part1和part2之间的字符c,你可以使用:@987654338 @.