如何删除可执行文件输出中的数字?

时间:2014-04-08 13:15:57

标签: bash

我运行一个可执行文件,它向stdout输出了很多行。最后一行是

Run in 100 seconds

写入最后一行的可执行文件的C程序中的代码是

printf("Ran in %g seconds\n", time);

所以最后有一个换行符。

我想删除最后一个号码,例如100,来自stdout,所以在bash中

./myexecutable > output

然后我想知道如何进一步解析output来获取bash中的时间数?我需要一些应用程序吗? 谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用grep

grep -oP 'Ran in \K\d+' output

grep -oP '(?<=Ran in )\d+(?= seconds)'  output

答案 1 :(得分:1)

让我们说:

s='Run in 100 seconds'

使用tr

tr -cd '[[:digit:]]' <<< "$s"
100

使用sed

sed 's/[^0-9]*//g' <<< "$s"
100

但是,如果您想要获取一行中的最后一个数字,请使用此前瞻性正则表达式

s='Run 10 in 100 seconds'
grep -oP '\d+(?!\D*\d)' <<< "$s"
100

答案 2 :(得分:1)

或者,使用tail抓住最后一行(tail -n 1 <file>)并通过以下方式提取数字 -

sed与三个模式组一起使用并打印第二组匹配:

tail -n 1 output | sed 's/\(^Run in \)\([0-9]\+\)\( seconds$\)/\2/g'

使用awk打印第三个($3)令牌:

tail -n 1 output | awk '{print $3}'