我試圖抓住最後一個空格以及使用grep在一行上跟隨它的內容。如何使用grep抓取正則表達式中的最後一個字符
這跟我搶第一空間:
echo "toto tata titi" | grep -o " .*$"
在Java中我會用非貪婪的運營商,但它似乎並沒有工作:
echo "toto tata titi" | grep -o " .*?$"
它返回任何
預期結果titi
。
我試圖抓住最後一個空格以及使用grep在一行上跟隨它的內容。如何使用grep抓取正則表達式中的最後一個字符
這跟我搶第一空間:
echo "toto tata titi" | grep -o " .*$"
在Java中我會用非貪婪的運營商,但它似乎並沒有工作:
echo "toto tata titi" | grep -o " .*?$"
它返回任何
預期結果titi
。
將.
替換爲[^ ]
,它匹配除空間以外的所有內容。那麼它可能是貪婪的。
echo "toto tata titi" | grep -o " [^ ]*$"
(如果你想grep
使用擴展的正則表達式,或者使用egrep
或grep -E
)
編輯:我剛纔看到一個更好的回答這個職位,但無論如何張貼這一點,因爲它可能如果你想做一些更復雜的事情,比如替代事物,這會有所幫助。
另一種方式來做到這一點的是使用sed
命令,讓它替代(用s
命令首先在正則表達式)的一切,除了你想要的(這是由括號收集到的變量\1
:
echo "toto tata titi" | sed -r "s/.*(.*?)$/\1/"
基本上,你在做什麼是剛開的最後一個字段的第一個字符,比正則表達式更平易近人的方法是使用一個工具,可以分割字符串成田和做「子-ING」。
$ echo "toto tata titi" | awk '{print substr($NF,0,1)}'
t
$ echo "toto tata titi" | ruby -ane 'puts $F[-1][0]'
t
你的正則表達式做我想做的事,謝謝。但是你知道爲什麼即使使用-E我的工作也不行嗎? – JPB 2011-02-16 13:32:17