奇怪的sed输出

时间:2014-10-31 14:20:58

标签: regex macos bash sed

以下带有sed和简单regexp的命令:

echo 'Atest Atest Atest' | sed -E 's/A|$/B/g'

产生输出:

Btest Btest B

有人可以解释一下,为什么sed会吃掉最后一句话?我期望输出是这样的:

Btest Btest BtestB

我使用与Mac OS捆绑的sed版本(" BSD-flavor")。

更新 与GNU sed相比,这种行为看起来像一个bug,所以我选择坚持使用后者。

1 个答案:

答案 0 :(得分:3)

有趣的是,这似乎是OSX上可用的BSD sed中的一些错误(奇怪的行为)。我可以重现这种行为。看起来只有g标志才会发生此行为。

要解决此问题,我建议使用此等效sed命令:

echo 'Atest Atest Atest' | sed 's/A/B/g;s/$/B/'
Btest Btest BtestB