GNU sed 和 BSD sed 区别说明

Enr*_*lis 5 bsd gnu sed gnu-sed

我写了以下命令

echo -en 'uno\ndue\n' | sed -E 's/^.*(uno|$)/\1/'
Run Code Online (Sandbox Code Playgroud)

期待以下输出

uno

Run Code Online (Sandbox Code Playgroud)

我的 GNU Sed 4.8 确实就是这种情况。

但是,我已经验证 BSD Sed 输出



Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Jar*_*rek 6

我想说 BSD 的 sed 仅兼容 POSIX。POSIX 指定仅支持基本正则表达式,这有许多限制(例如,根本不支持 |(交替),不直接支持 + 和 ?)以及不同的转义要求。

BSD sed 是 MacOS 上的默认sed,因此新系统上的第一件事就是获取 GNU 兼容的 sed:brew install gsed