排除包含字符串 'x' 的通配符
Exclude wildcard containing string 'x'
有没有办法修改 egrep -rha 'part1.*part2'
以添加如下内容:"if .*
contains (not necessarily equals) string_x
then pattern is not a match"?问题是 string_x
出现在每一行中,所以我不能 -v
它。在模式之前或之后有这个字符串是可以的,只是不要在它的中间。
我假设双 .*
和它们之间的 not string_x
可以完成工作,但这会花费很多时间,而且我有时会使用 .{n,m}
通配符,在这种情况下,它会使所需的通配符长度加倍。也许每次在第 2 部分之前遇到 string_x
时某种搜索终止?
忘记您曾听说过 -r
或让 grep
查找文件的任何其他选项。有一个非常好的工具可以用来查找名称非常明显的文件 - find
。保持 grep 的优势 g/re/p
。我无法想象当 GNU 人员决定提供 grep 选项来查找文件时他们在抽什么烟,但希望他们现在不会密谋添加选项来对文件进行排序或从网站中提取内容或打印过程数据或做任何其他事情现有工具做得非常好!
在这种情况下,您要寻找的不仅仅是 g/re/p
,所以您应该使用 awk:
awk '/part1.*part2/ && !/part1.*string_x.*part2/'
所以完整的脚本应该是这样的(未经测试,因为没有提供示例 input/output):
find . -type f -exec awk '/part1.*part2/ && !/part1.*string_x.*part2/' {} +
有没有办法修改 egrep -rha 'part1.*part2'
以添加如下内容:"if .*
contains (not necessarily equals) string_x
then pattern is not a match"?问题是 string_x
出现在每一行中,所以我不能 -v
它。在模式之前或之后有这个字符串是可以的,只是不要在它的中间。
我假设双 .*
和它们之间的 not string_x
可以完成工作,但这会花费很多时间,而且我有时会使用 .{n,m}
通配符,在这种情况下,它会使所需的通配符长度加倍。也许每次在第 2 部分之前遇到 string_x
时某种搜索终止?
忘记您曾听说过 -r
或让 grep
查找文件的任何其他选项。有一个非常好的工具可以用来查找名称非常明显的文件 - find
。保持 grep 的优势 g/re/p
。我无法想象当 GNU 人员决定提供 grep 选项来查找文件时他们在抽什么烟,但希望他们现在不会密谋添加选项来对文件进行排序或从网站中提取内容或打印过程数据或做任何其他事情现有工具做得非常好!
在这种情况下,您要寻找的不仅仅是 g/re/p
,所以您应该使用 awk:
awk '/part1.*part2/ && !/part1.*string_x.*part2/'
所以完整的脚本应该是这样的(未经测试,因为没有提供示例 input/output):
find . -type f -exec awk '/part1.*part2/ && !/part1.*string_x.*part2/' {} +