2011-02-16 35 views
5

我試圖抓住最後一個空格以及使用grep在一行上跟隨它的內容。如何使用grep抓取正則表達式中的最後一個字符

這跟我搶第一空間:

echo "toto tata titi" | grep -o " .*$" 

在Java中我會用非貪婪的運營商,但它似乎並沒有工作:

echo "toto tata titi" | grep -o " .*?$" 

它返回任何

預期結果titi

回答

6

.替換爲[^ ],它匹配除空間以外的所有內容。那麼它可能是貪婪的。

echo "toto tata titi" | grep -o " [^ ]*$" 

(如果你想grep使用擴展的正則表達式,或者使用egrepgrep -E

+0

你的正則表達式做我想做的事,謝謝。但是你知道爲什麼即使使用-E我的工作也不行嗎? – JPB 2011-02-16 13:32:17

1

編輯:我剛纔看到一個更好的回答這個職位,但無論如何張貼這一點,因爲它可能如果你想做一些更復雜的事情,比如替代事物,這會有所幫助。

另一種方式來做到這一點的是使用sed命令,讓它替代(用s命令首先在正則表達式)的一切,除了你想要的(這是由括號收集到的變量\1

echo "toto tata titi" | sed -r "s/.*(.*?)$/\1/" 
1

基本上,你在做什麼是剛開的最後一個字段的第一個字符,比正則表達式更平易近人的方法是使用一個工具,可以分割字符串成田和做「子-ING」。

$ echo "toto tata titi" | awk '{print substr($NF,0,1)}' 
t 


$ echo "toto tata titi" | ruby -ane 'puts $F[-1][0]' 
t 
相關問題