假设我有一个包含路径./bar2.txt的文件 和bar2.txt的内容是
./bar2.txt
的输出
grep "\bbar2\b" *
是
bar2.txt:./bar2.txt
正如预期的那样,
find . -regextype posix-extended -regex "\bbar2\b"
找不到任何东西。
我知道我应该将正则表达式更改为
".*/bar2.*"
因为find寻找完整路径。那么,这是否意味着find忽略\ b指定单词边界?
提前致谢。
答案 0 :(得分:1)
grep
和find
将使用不同的正则表达式引擎。值得注意的是,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
边界。
根据我的理解\b
是Perl regular expressions的一部分,find
无法使用,因为find
不支持Perl regextype grep