如何使用sed提取数字

时间:2017-03-16 21:54:27

标签: linux sed

如何使用dash(-)从以下字符串.zip中提取上一个fooBar-5.3.8-78642.zipsed之前的数字?

我想提取8-78642

2 个答案:

答案 0 :(得分:2)

将您想要的部分与捕获组匹配,然后仅使用该反向引用替换整行。

echo "fooBar-5.3.8-78642.zip" | sed -r 's/.*\.([0-9]+-[0-9]+)\.zip$/\1/'

答案 1 :(得分:1)

要获得统一且可移植的解决方案(适用于所有sed实施),请使用基于Basic Regular Expression (BRE)的以下方法:

echo "fooBar-5.3.8-78642.zip" | sed 's/.*\([[:digit:]]\+\-[[:digit:]]\+\)\.zip$/\1/'
  

基本正则表达式(BRE)是 sed 中的默认值(同样在   的grep)

<强> -------------------------------------------- --------------------

使用awk语言的第二个简单替代方法(没有正则表达式):

echo fooBar-5.3.8-78642.zip | awk -F"." '{print $3}'

-F"." - .此处被视为字段分隔符

$3 - 指向第三个字段,即8-78642

<强> -------------------------------------------- --------------------

最后一个简单快捷的选择是使用cut命令:

echo "fooBar-5.3.8-78642.zip" | cut -d'.' -f3

输出(对于上述每种方法):

8-78642