以下带有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,所以我选择坚持使用后者。
答案 0 :(得分:3)
有趣的是,这似乎是OSX上可用的BSD sed中的一些错误(奇怪的行为)。我可以重现这种行为。看起来只有g
标志才会发生此行为。
要解决此问题,我建议使用此等效sed
命令:
echo 'Atest Atest Atest' | sed 's/A/B/g;s/$/B/'
Btest Btest BtestB