仅获取输出中的数字

时间:2019-04-25 10:51:21

标签: bash awk sed grep

我只需要从中获取数字: release/M_0.1.0 因此,需要使用bash提取以在输出中包含以下内容: 0.1.0。 我已经尝试过了,但是无法完成: echo "release/M_0.1.0" | awk -F'/' '{print $2}'

如果给出这样的字符串怎么办? relea234se/sdf23_4Mm0.1.0.8。如何只获得0.1.0.8?请注意,这可以是0.21.9.1之类的随机数字。

7 个答案:

答案 0 :(得分:3)

您还可以使用常规参数扩展解析来从字面上删除最后一个不是数字或点的字符。

$: ver() { echo "${1//*[^.0-9]/}"; }
$: ver release/M_0.1.0
0.1.0
$: ver relea234se/sdf23_4Mm0.1.0.8
0.1.0.8

答案 1 :(得分:2)

使用sed,您可以执行以下操作:

echo "release/M_0.1.0" | sed 's@.*_@@'

输出

0.1.0

答案 2 :(得分:1)

请检查此grep命令是否有效

echo "release/M_0.1.0" | egrep -o '[0-9.]+'

答案 3 :(得分:0)

考虑到您的Input_file与显示的示例相同。

echo "$var" | awk -F'_' '{print $2}'

或可以使用sub

echo "$var" | awk '{sub(/.*_/,"")} 1'

使用简单的bash,您可以使用:

echo "${var#*_}"

答案 4 :(得分:0)

echo release/M_0.1.0 | awk -F\_ '{print $2}'
0.1.0

答案 5 :(得分:0)

选择:

$ var='relea234se/sdf23_4Mm0.1.0.8'

$ [[ $var =~ .*[^0-9.](.*) ]] && echo "${BASH_REMATCH[1]}"
0.1.0.8

$ echo "$var" | sed 's/.*[^0-9.]//'
0.1.0.8

$ echo "$var" | awk -F'[^0-9.]' '{print $NF}'
0.1.0.8

答案 6 :(得分:0)

如果d文件中的数据,请尝试使用gnu sed:

sed -E 's/relea.*/.*([0-9][0-9.]*)$/\1/' d