2017-03-16 225 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