1

假设我有一个路径为 ./bar2.txt 的文件,bar2.txt 的内容是

./bar2.txt

的输出

grep "\bbar2\b" *

bar2.txt:./bar2.txt

正如预期的那样,在哪里

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

什么也没找到。

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

".*/bar2.*" 

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

提前致谢。

4

2 回答 2

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

于 2013-02-07T01:29:43.977 回答
0

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

据我了解\b,它是Perl 正则表达式的一部分,不能用于find,因为find它不支持Perl 正则表达式grep

于 2013-02-06T05:42:13.507 回答