【问题标题】:Why does sed -e 's/[ +-]?[0-9]*\.[0-9]*//g' not work?为什么 sed -e 's/[ +-]?[0-9]*\.[0-9]*//g' 不起作用?
【发布时间】:2012-10-12 05:30:43
【问题描述】:

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

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

但它不起作用:

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

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

【问题讨论】:

  • 我只接受他们,如果他们解决了。开放的没有解决,因为我需要它们。
  • 请注意,您的正则表达式也会删除孤点。

标签: regex sed


【解决方案1】:

你需要转义问号:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      转义? 或sed -r

      那么它应该可以工作。

      【讨论】:

        【解决方案4】:

        这个版本更具可比性。 ?不适用于所有系统,+ 表示重复一次或多次。

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

        【讨论】:

          猜你喜欢
          • 2014-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-15
          相关资源
          最近更新 更多