找到命令忽略锚点

时间:2013-02-05 20:04:51

标签: regex find

假设我有一个包含路径./bar2.txt的文件 和bar2.txt的内容是

./bar2.txt

的输出
grep "\bbar2\b" *

bar2.txt:./bar2.txt
正如预期的那样,

find . -regextype posix-extended -regex "\bbar2\b"

找不到任何东西。

我知道我应该将正则表达式更改为

".*/bar2.*" 

因为find寻找完整路径。那么,这是否意味着find忽略\ b指定单词边界?

提前致谢。

2 个答案:

答案 0 :(得分:1)

grepfind将使用不同的正则表达式引擎。值得注意的是,POSIX正则表达式(find使用)不包括“\ b”作为单词边界,因此它与“b”相同。例如,在OSX上,这些结果具有相同的结果:

find . -regex '.*bar2.txt' -print

find . -regex '.*\bar2.txt' -print

仔细检查联机帮助页以确保-regex正在执行您的想法。对于我的find,正则表达式必须与整个文件名匹配,例如这找不到任何文件:

find . -regex 'bar' -print

但是这个确实:

find . -regex '.*bar.*' -print

答案 1 :(得分:0)

  

但是,我很好奇的是它忽略了指定单词的\b   边界。

根据我的理解\bPerl regular expressions的一部分,find无法使用,因为find不支持Perl regextype grep