在程序输出中选择一个特定值(Bash)

时间:2013-06-30 02:32:45

标签: linux string bash sed

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

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

我只需要选择“80”值作为整数。我尝试使用sed并来到这个命令:

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

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

3 个答案:

答案 0 :(得分: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 %

答案 1 :(得分:1)

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

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

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

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

如果你想用sed做,那么你可以试试:

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

答案 2 :(得分:1)

这可能适合你(GNU sed):

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