为什么sed -e's / [+ - ]?[0-9] * \。[0-9] * // g'不起作用?

时间:2012-10-11 12:58:26

标签: regex sed

我想使用sed从字符串中删除所有浮点数。因此我使用

sed -e 's/[ +-]?[0-9]*\.[0-9]*//g'

但它不起作用:

echo 1.2456 | sed -e 's/[ +-]?[0-9]*\.[0-9]*//g'

给出1.2456。如果我删除了[ +-]?块,则它适用于正数。

4 个答案:

答案 0 :(得分:4)

你需要逃避问号:

echo 1.2456 | sed -e 's/[ +-]\?[0-9]*\.[0-9]*//g'

答案 1 :(得分:1)

?符号是扩展的正则表达式字符。需要使用sed选项调用-r以启用扩展表达式。

答案 2 :(得分:0)

逃避?sed -r

然后它应该工作。

答案 3 :(得分:0)

此版本更具可比性。 ?不适用于所有系统,+可能意味着重复一次或多次。

echo 1.2456 | sed -e 's/[ \+\-]*[0-9]*\.[0-9]*//g'