下面的命令sed和正则表达式简单:奇怪的桑达输出
echo 'Atest Atest Atest' | sed -E 's/A|$/B/g'
产生输出:
Btest Btest B
可能有人解释,请,为什么吃sed的最后一个字?我预计输出是这样的:
Btest Btest BtestB
我使用与Mac OS捆绑在一起的sed版本(“BSD-flavor”)。
更新 与GNU sed相比,此行为看起来像一个错误,所以我选择了坚持后者。
下面的命令sed和正则表达式简单:奇怪的桑达输出
echo 'Atest Atest Atest' | sed -E 's/A|$/B/g'
产生输出:
Btest Btest B
可能有人解释,请,为什么吃sed的最后一个字?我预计输出是这样的:
Btest Btest BtestB
我使用与Mac OS捆绑在一起的sed版本(“BSD-flavor”)。
更新 与GNU sed相比,此行为看起来像一个错误,所以我选择了坚持后者。
有趣的是,这似乎是在OSX上可用的BSD sed中的一些错误(奇怪的行为)。我可以重现这种行为。看起来这种行为只发生在g
标志。
为了解决这个问题,我建议使用这种等价sed
命令:
echo 'Atest Atest Atest' | sed 's/A/B/g;s/$/B/'
Btest Btest BtestB
工作细到我的'sed的(GNU SED)4.2.2'。 – fedorqui 2014-10-31 14:23:51
我的sed(4.2.2)返回你的期望。它在Windows下的cygwin下的zsh – 2014-10-31 14:24:12
适用于我。 sed 4.2.1也能像你期望的那样工作。 – flob 2014-10-31 14:27:13