在 OSX 上编译时 sed 版本不正确

在 OSX 上编译时 sed 版本不正确

我正在尝试安装crosstool-ng在 OSX 10.6.8 上。在配置阶段,我运行./configure --prefix=/opt/cross,并得到以下输出:

! ./configure --prefix=/opt/cross
checking build system type... x86_64-apple-darwin10.8.0
checking host system type... x86_64-apple-darwin10.8.0
checking for a BSD-compatible install... /opt/local/bin/ginstall -c
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for a sed that does not truncate output... /usr/bin/sed
checking whether sed understands -r -i -e... no
configure: error: 

看起来sed应该接受-r作为参数,但事实并非如此。查找sed 这里 也表明这-r是一个有效的论点,但是当我运行时man sed我不认为我的版本允许这样做:

SED(1)                    BSD General Commands Manual                   SED(1)

NAME
     sed -- stream editor

SYNOPSIS
     sed [-Ealn] command [file ...]
     sed [-Ealn] [-e command] [-f command_file] [-i extension] [file ...]

我的系统是否包含错误的版本sed?我该怎么做才能使我的系统sed兼容crosstool-ng

答案1

GNU sed使用-r和 OSX 的BSD sed使用-E来启用扩展正则表达式。GNU sed 也理解 ,-E这是一项未记录的功能,但 BSD sed 不理解-r。因此,您要么需要先安装 GNU sed 并临时更改搜索路径,以便 configure 首先看到它,要么您可以尝试在 sed 周围创建一个包装器,以便-r将其转换为-E。然后它可能仍然不起作用,因为-i选项的工作方式略有不同。

相关内容