【问题标题】:How do I use sed to remove decimal numbers from a string?如何使用 sed 从字符串中删除十进制数字?
【发布时间】:2011-06-28 20:20:57
【问题描述】:

我以以下字符串为例: 前任。 "弃16 1.10 2.62 3.50"

我想将此结果通过管道传递给 sed 并删除所有十进制数字,以留给我以下内容: 前任。 《被遗弃的 16 岁》

我正在使用以下命令:sed 's/.//g' 这显然不起作用。

谁能告诉我如何使用通配符和 sed 来删除任何匹配“.”的内容。

谢谢

【问题讨论】:

    标签: linux unix sed wildcard


    【解决方案1】:

    你还没有说你想用空格做什么,但是怎么样

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

    【讨论】:

      【解决方案2】:

      awk 会更容易,至少对我来说是这样

      echo "Abandoned 16 1.10 2.62 3.50" | awk '{print $1FS$2}'

      但是之后的数字列表是随机的吗?

      如果是这样,这也有效

      echo "Abandoned 16 1.10 2.62 3.50" | sed -r 's/\s([0-9]+)\.([0-9]+)//g'

      请注意\s 会捕获空格,并且小数点前后的数字会被保存,因此如果您想保留它们并对其进行处理,您可以分别使用\1\2 访问它们

      为什么要抓住白色的sapce?想象一下,如果在您的示例中 16 出现在 3.50 之后,那么您将返回

      Abandoned [5spaces*] 16 *我只能在这个<textarea>中插入一个空格

      【讨论】:

      • 您想保留这些空格吗?您要求“Abandoned 16”awk '{print$1FS$2}' 应该从您给定的字符串中执行此操作。注意FS,它是字段分隔符,在本例中为空格。
      【解决方案3】:

      引入一个 awk 解决方案,该解决方案循环输入并跳过其中包含句点的条目

      {
           printf("%s ", $1)
           for(i=2;i<NF;i++) {
               if ($i !~ /\./) {
                   printf( " %s ", $i)
               }
           }
      }
      
      $ echo Abandoned 16 1.10 2.62 3.50 | awk -f f.awk 
      Abandoned  16 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-09
        • 2013-05-09
        • 2019-10-20
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 2011-12-07
        相关资源
        最近更新 更多