我想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)
\n\n\n--and
\n
\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}\'
-e所以你确实为每个模式都写了;但您没有选择--and或之一--or,因此您得到了默认值。哪一个是默认的?(阅读上面引用的文字。)如果您要求匹配某些模式或长度不超过 200 个字符的内容,是否会选择 12 个字符长的内容?少于 200,所以是的,它将被选择。既包含 234 个字符又匹配的内容怎么样?嗯,它匹配,所以是的,它将被选择。唯一会被拒绝的内容是那些既不匹配又包含200 个字符或更长的内容。
请注意,git grep它本身也默认为基本正则表达式,除非您使用命令行选项或将其配置为使用扩展或 Perl 正则表达式。所以你可能想要-E -e <pattern> --and --not -e \'.{200}\'这里。另请参阅https://en.wikipedia.org/wiki/Regular_expression