2011-11-21 181 views
0

模式我有這樣提取使用sed命令

"112344 1234234 guest 25 % allocation used" 

我想用SED提取25出這一串一串的。

在給定的行「112344 1234234客戶使用25%的分配」中,我只對「25%」感興趣。第一個字段可以是空的也,是這樣的:

,而是「用%分配」固定字符串「用25%的分配」。 所以正則表達式應該基於這個固定模式。

任何人都可以請幫助我。

+0

很難想出僅基於單個樣本輸入提取某些東西的正則表達式模式。哪些部分有所不同以什麼方式? (當然,這正是編寫正則表達式的本質。) – sarnold

+0

這是非常不確定的。你總是想要第四場?第一個兩位數字? –

+0

請說明您是希望'25'提取還是'25%'。 –

回答

0

試試這個

cut -d% -f1 | awk '{ print $(NF) }' 
2

基本上,你想要的是從右邊第四個字段。爲了得到這個,我會使用awk

awk '{ print $(NF-3) }' 

如果絕對必須在sed,試試這個:

sed -e 's/^/ /' -e 's/\(^|.* \)\(.*\) % allocation used/\1/' 
+0

它不提取25%。而是打印整條生產線。 – Fayaz

+0

@Fayaz我使用了'\ <'元字符,它是GNU sed中的一個擴展。我修改過它以適用於任何POSIX兼容的sed。 –

+0

@Fayaz你可能想更新你的問題。它聲明'我想從sed中提取25個字符串。'如果你還需要'%',也可以使用這個 - 'sed -e's /.* \ <\(。* \)allocation used/\ 1 /' –

1

如果您確信該'%'之前的數字是2位數,那麼您可以使用以下內容

[jaypal~/Temp]$ cat text5 
112344 1234234 guest 25 % allocation used 
25 % allocation used 
2344 guest 15 % allocation used 

[jaypal~/Temp]$ sed 's/.*\(.. %\).*/\1/' text5 
25 % 
25 % 
15 %