2014-02-11 52 views

回答

2

.*是貪婪的,所以它會匹配儘可能多的字符可能。在這種情況下,.*將與eta_x2-0.00050匹配,而您的組中只匹配最後的0

通常這裏的答案是隻使用.*?的非貪婪匹配,但我不認爲sed支持這一點。

你應該能夠得到這個被要求有一個非數字字符開始匹配之前的工作,這樣的.*將消耗數字之前停止:

sed 's/.*[^0-9.]\([0-9.]\+\)/\1/g' 

當然如果你知道你想要的數字會在-之後,你可以用-代替[^0-9.],它的工作方式也是一樣的。

+0

由於FJ我太專注於端部和爲什麼似乎沒有表現貪婪,我忘記了第一個。這個概念讓我在sed中尋找貪婪。事實證明,我可能正在尋找的是'perl',它支持非貪婪修飾符,並且作爲獎勵並不需要那麼多\轉義。另外,perl具有像\ d和\ w這樣有用的簡寫形式。因此,我可以得到:'find eta * | perl -pe's |。*?(\ d + \。\ d +)| \ 1 |''。使用[this](http://nixtip.wordpress.com/2011/06/14/text-processing-performance-perl-vs-sed/),sed和perl似乎同樣快。那麼爲什麼還有人會使用sed? – AdamAL

1

在sed前添加-最後一個數字,g是無用的。

find eta* | sed 's/.*-\([0-9.]\+\)/\1/' 
+0

+1投擲出摹 – AdamAL

0

不需要的sed

find eta* | grep -oP '(?<=-)[\s.]+' 
find eta* | cut -d'-' -f 2 
0

這應該工作 -

find eta* | sed 's/[^-]*-\([0-9]*\.[0-9]*\)/\1/' 
相關問題