![在 OSX 上编译时 sed 版本不正确](https://linux22.com/image/1357675/%E5%9C%A8%20OSX%20%E4%B8%8A%E7%BC%96%E8%AF%91%E6%97%B6%20sed%20%E7%89%88%E6%9C%AC%E4%B8%8D%E6%AD%A3%E7%A1%AE.png)
我正在尝试安装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
选项的工作方式略有不同。