为什么这个正则表达式不起作用?
find ./ -regex '.*\(m\|h\)$
Run Code Online (Sandbox Code Playgroud)
我注意到以下工作正常:
find ./ -regex '.*\(m\)$'
Run Code Online (Sandbox Code Playgroud)
但是,当我添加"或在文件名的末尾啊"通过添加\|h它不起作用.也就是说,它应该拿起我所有的*.m和*.h文件,但我得到任何回报.
我在Mac OS X上.
Mik*_*kel 30
在Mac OS X上,您不能\|在基本正则表达式中使用,这是find默认情况下使用的正则表达式.
[基本]正则表达式在几个方面有所不同.| 是一个普通的角色,没有相应的功能.
在这种情况下最简单的解决方法是\(m\|h\)改为[mh],例如
find ./ -regex '.*[mh]$'
Run Code Online (Sandbox Code Playgroud)
或者您可以添加-E选项以告诉find使用扩展正则表达式.
find -E ./ -regex '.*(m|h)$'
Run Code Online (Sandbox Code Playgroud)
不幸的-E是不便携.
另请注意,如果您只想列出以.m或结尾的文件.h,则必须转义点,例如
find ./ -regex '.*\.[mh]$'
Run Code Online (Sandbox Code Playgroud)
如果您发现这一点令人困惑(我也是),那么有一个很棒的参考表可以显示哪些系统支持哪些功能.
Wes*_*Wes 10
更有效的解决方案是使用-o标志:
find . -type f \( -name "*.m" -o -name "*.h" \)
Run Code Online (Sandbox Code Playgroud)
但如果你想使用正则表达式:
find . -type f -regex ".*\.[mh]$"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18394 次 |
| 最近记录: |