2017-03-16 1255 views
0

如何从下列字符串中提取最后一个dash(-).zip之前的数字 - fooBar-5.3.8-78642.zip使用sed如何使用sed提取数字

我想提取8-78642

+0

如果该值在变量中,则使用shell的内置字符串替换opera发电机会更加高效和优雅。 '头= $ {值%的.zip};值= $ {#头* [!0-9]}' – tripleee

回答

2

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

echo "fooBar-5.3.8-78642.zip" | sed -r 's/.*\.([0-9]+-[0-9]+)\.zip$/\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