如何使用`git grep --not`

Sam*_*ton 6 git grep

我想git grep为 a 运行命令<pattern>,但排除超过 200 个字符的行。

我已经成功地通过命令实现了这一点:

git grep <pattern> | grep -Ev '.{200}'
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想将其作为一个命令运行(没有管道)。我以为我可以利用该git grep --not标志来实现此目的,但遇到了困难。

这是我的尝试:

git grep -e <pattern> --not -e '.{200}'
Run Code Online (Sandbox Code Playgroud)

我尝试了上述命令的不同组合,但没有得到所需的输出。

任何关于我下一步应该尝试什么的指示将不胜感激,提前感谢您的帮助。


解决方案

(感谢@torek)

git grep -E -e one --and --not -e '.{200}'
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 6

读取布尔运算符的git grep说明:

\n\n
\n

--and
\n --or
\n --not
\n ( \xe2\x80\xa6\xe2\x80\x8b )
\n 指定如何使用布尔表达式组合多个模式。--or是默认运算符。--and优先级高于--or. -e必须用于所有模式。

\n
\n\n

您使用过:

\n\n
\n

git grep -e <pattern> --not -e \'.{200}\'

\n
\n\n

-e所以你确实为每个模式都写了;但您没有选择--and或之一--or,因此您得到了默认值。哪一个是默认的?(阅读上面引用的文字。)如果您要求匹配某些模式长度超过 200 个字符的内容,是否会选择 12 个字符长的内容?少于 200,所以是的,它将被选择。既包含 234 个字符匹配的内容怎么样?嗯,它匹配,所以是的,它将被选择。唯一会被拒绝的内容是那些既不匹配包含200 个字符或更长的内容。

\n\n

请注意,git grep它本身也默认为基本正则表达式,除非您使用命令行选项或将其配置为使用扩展或 Perl 正则表达式。所以你可能想要-E -e <pattern> --and --not -e \'.{200}\'这里。另请参阅https://en.wikipedia.org/wiki/Regular_expression

\n