Mac OS X和BSD上的“git grep”和单词边界

ffvjumwh  于 2023-01-28  发布在  Git
关注(0)|答案(4)|浏览(119)

我经常在我的Linux开发服务器上运行git grep "\<blah\>",但我刚刚发现我无法在Mac(Mac OS X 10.6.8)上使用\<\>(无法使用=它找不到任何东西)。
我试着使用git grep -E "\<blah\>",但无济于事

cwxwcias

cwxwcias1#

经过一番努力之后,我在BSD邮件列表中找到了this very helpful post,下面是解决方案(尽管相当难看):

git grep "[[:<:]]blah[[:>:]]"

git-grep的-w标志也可以使用,但是有时候你只想匹配单词的开头或结尾。

**更新:**这在OS X 10.9“Mavericks”中已更改。现在您可以使用\<\>\b。不再支持[[:<:]][[:>:]]

piv4azn7

piv4azn72#

我猜这是由BSD与Linux grep库引起的。
看看git grep的-w(match pattern only at word boundary)选项是否能帮你做到:

$ git grep -w blah
eanckbw9

eanckbw93#

你可以使用PCRE支持编译git,并使用git grep -P "\bblah\b"作为单词边界。
以下是如何使用OSX Homebrew编译git的指南:http://realultimateprogramming.blogspot.com/2012/01/how-to-enable-git-grep-p-on-os-x-using.html

92dk7w1h

92dk7w1h4#

如果你使用-P,请确保使用Git 2.40(Q1 2023):"grep -P"在处理\b\w等字符时,学会了使用Unicode字符属性查找字符类。
参见Carlo Marcelo Arenas Belón ( carenas )(2023年1月8日)。
(由Junio C Hamano -- gitster --合并至commit 557d93a,2023年1月27日)

grep:正确识别-P\{b,w}的UTF-8字符

签署人:卡洛·马塞洛·阿里纳斯·贝隆
确认人:埃瓦尔·阿恩菲约德·比贾马森
当为PCRE匹配启用UTF时,相应的标志将添加到pcre2_compile()调用中,但不包括PCRE2_UCP
这防止扩展字符类的含义以包括那些新的有效字符,并因此导致依赖于该扩展的表达式的匹配失败,例如:

$ git grep -P '\bÆvar'

添加PCRE2_UCP,使\w包含Æ,从而\b可以正确匹配该单词的开头。
这对性能的影响估计在20%到40%之间,并通过增加的性能测试显示。
这意味着这些模式适用于任何字符:

'\bhow' 
'\bÆvar'
'\d+ \bÆvar'
'\bBelón\b'
'\w{12}\b'

相关问题