【问题标题】:Pick a specific value in a program output (Bash)在程序输出中选择一个特定值(Bash)
【发布时间】:2013-06-30 02:32:45
【问题描述】:

我在由 C 程序调用的 linux 终端中运行 LIBSVM。好的,我需要选择输出,但格式如下

Accuracy = 80% (24/30) (classification)

我只需要选择“80”值作为整数。我尝试使用 sed 并得出以下命令:

sed 's/[^0-9^'%']//g' 'f' >> f

这是过滤输出中的所有整数,因此还不能正常工作,所以我需要帮助。提前致谢

【问题讨论】:

    标签: linux string bash sed


    【解决方案1】:

    在 PCRE 模式下尝试grep (-P),只打印匹配的部分 (-o),使用 lookahead assertion:

     $ echo "Accuracy = 80% (24/30) (classification)" | grep -Po '[0-9]+(?=%)'
     80
    

    正则表达式:

    [0-9]  # match a digit
    +      # one or more times
    (?=%)  # assert that the digits are followed by a %
    

    【讨论】:

      【解决方案2】:

      awk 非常简单。确定您需要的列并从中删除“%”符号。 /^Accuracy/ 正则表达式确保该操作仅在以 Accuracy 开头的行上执行。如果您的文件仅包含一行,则不需要它。

      awk '/^Accuracy/{sub(/%/,"");print $3}' inputFile
      

      或者,您可以将空格和% 设置为字段分隔符并执行

      awk -F'[ %]' '/^Accuracy/{print $3}' inputFile
      

      如果你想用sed 来做,那么你可以尝试这样的事情:

      sed '/^Accuracy/s/.* \(.*\)%.*/\1/' inputFile
      

      【讨论】:

        【解决方案3】:

        这可能对你有用(GNU sed):

        sed -nr '/^Accuracy = ([^%]*)%.*/s//\1/p' file
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-27
          • 1970-01-01
          • 1970-01-01
          • 2011-10-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多