在Mac OS X上使用命令find的扩展POSIX实用程序?

10

我试图在我的Mac OS X 10.9终端上执行此命令:

find / -type f -regextype posix-extended -regex "(.*A.*a.*.*)|(.*a.*A.*.*)" -exec tail -n 3 '{}' \;

但是Bash v 3.2的响应是:
find: -regextype: unknown primary or operator

我已经在终端手册页上进行了深入的搜索:
man find

man regex

但是我什么都没有找到。Mac OS X Bash v3.2需要更新吗?似乎"find"命令中不包括"-regextype"选项。

我该如何解决呢?

附注:这条命令在Ubuntu Linux 14上可以完美运行。


那么你的问题是它是否应该被更新?:p 这不是一个很好的问题,而且它肯定不是一个编程问题。Mac的实用程序缺少在它们的Linux对应程序中发现的一些功能。可能会有一种方法来获取扩展/更新版本。 -regex标志已经存在于Mac上。 - keyser
@kitsune:这是“find”命令的一个特性,而不是你旧版的Bash的特性。 - Cyrus
@keyser 不,它不是这样的,bash 3.2 说了一切。当然,你可以安装GNU工具(就像在Windows上),但你还会说它是一个“Mac系统”吗?Mac OS适合图形和有太多钱的人。 - hek2mgl
@hek2mgl,您似乎没有意识到Mac是Unix系统。将其与Windows在终端功能方面进行比较是荒谬的。 - keyser
2
使用Homebrew,您可以在OS X上安装GNU findutils和bash 4.3。http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/ - John B
显示剩余10条评论
2个回答

14
您的问题的最简单答案是,在OS X上,您需要使用-E选项而不是-regextype posix-extended
即:

find -E / -type f -regex "(.*A.a..*)|(.*a.A..*)" -exec tail -n 3 '{}' \;

除了抱怨的-exec tail命令外,以上内容在我的10.10安装中正常工作。
这实际上已经被man页面的第一个条目覆盖。
 The options are as follows:

 -E      Interpret regular expressions followed by -regex and -iregex primaries as extended (modern) regular expressions rather than basic
         regular expressions (BRE's).  The re_format(7) manual page fully describes both formats.

0

你可以使用基本的正则表达式来实现:

find / -type f -regex "\(.*A.*a.*.*\)\|\(.*a.*A.*.*\)" -exec tail -n 3 '{}' \;

find / -type f -regex ".*A.*a.*.*" 或 -regex ".*a.*A.*.*" -exec tail -n 3 '{}' \; - shogitai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接