linux 查找正则表达式
我在使用 find
命令的正则表达式时遇到问题。可能我不明白在命令行上转义的事情。
为什么这些不一样?
find -regex '.*[1234567890]'
find -regex '.*[[:digit:]]'
bash、Ubuntu
I'm having trouble using the regex of the find
command. Probably something I don't understand about escaping on the command line.
Why are these not the same?
find -regex '.*[1234567890]'
find -regex '.*[[:digit:]]'
Bash, Ubuntu
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您应该查看
find
的-regextype
参数,请参阅 manpage:我猜
emacs
类型不支持[[:digit:]]
构造。我用 posix-extend 尝试了它,它按预期工作:You should have a look on the
-regextype
argument offind
, see manpage:I guess the
emacs
type doesn't support the[[:digit:]]
construct. I tried it withposix-extended
and it worked as expected:find
使用的默认正则表达式语法不支持具有字符类的正则表达式(例如[[:digit:]]
)。您需要指定不同的正则表达式类型,例如 posix-extended 才能使用它们。查看 GNU Find 的正则表达式文档它显示了所有正则表达式类型及其支持的内容。
Regular expressions with character classes (e.g.
[[:digit:]]
) are not supported in the default regular expression syntax used byfind
. You need to specify a different regex type such asposix-extended
in order to use them.Take a look at GNU Find's Regular Expression documentation which shows you all the regex types and what they support.
请注意,
-regex
取决于整个路径。您实际上不必使用
-regex
来完成您正在做的事情。Note that
-regex
depends on whole path.You don't actually have to use
-regex
for what you are doing.好吧,你可以试试这个
'.*[0-9]'
Well, you may try this
'.*[0-9]'