我运行一个可执行文件,它向stdout输出了很多行。最后一行是
Run in 100 seconds
写入最后一行的可执行文件的C程序中的代码是
printf("Ran in %g seconds\n", time);
所以最后有一个换行符。
我想删除最后一个号码,例如100,来自stdout,所以在bash中
./myexecutable > output
然后我想知道如何进一步解析output
来获取bash中的时间数?我需要一些应用程序吗?
谢谢!
答案 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}'