Bash:从字符串中提取(百分比)可变长度的数量

Ste*_*han 5 string bash numbers progress-bar

我想使用 bash 脚本编写一个小进度条。

要生成进度条,我必须从日志文件中提取进度。

该文件(此处为 run.log)的内容如下所示:

完成时间 2d 15h,完成 42.5%,剩余时间步数 231856

我现在有兴趣隔离 42.5%。现在的问题是,该数字的长度以及数字的位置都是可变的(例如,“完成时间”可能只包含一个数字,如 23 小时或 59 分钟)。

我通过这个位置尝试过

echo "$(tail -1 run.log | awk '{print $6}'| sed -e 's/[%]//g')"
Run Code Online (Sandbox Code Playgroud)

短暂的“完成时间”以及通过 % 符号都会失败

echo "$(tail -1 run.log | egrep -o '[0-9][0-9].[0-9]%')"
Run Code Online (Sandbox Code Playgroud)

这里仅适用于数字 >= 10%。

有更多可变数字提取的解决方案吗?

=================================================== ====

更新:现在是进度条的完整脚本:

#!/bin/bash

# extract % complete from run.log
perc="$(tail -1 run.log | grep -o '[^ ]*%')"

# convert perc to int
pint="${perc/.*}"

# number of # to plot
nums="$(echo "$pint /2" | bc)"

# output
echo -e ""
echo -e "   completed: $perc"
echo -ne "   "
for i in $(seq $nums); do echo -n '#'; done
echo -e ""
echo -e "  |----.----|----.----|----.----|----.----|----.----|"
echo -e "  0%       20%       40%       60%       80%       100%"
echo -e ""
tail -1 run.log
echo -e ""
Run Code Online (Sandbox Code Playgroud)

谢谢你们的帮助,伙计们!

Ken*_*ent 4

根据你的例子

grep -o '[^ ]*%'
Run Code Online (Sandbox Code Playgroud)

应该给你想要的。