2013-03-21 220 views

回答

13

試試這個:

your cmd...|sed 's/.*\. //' 

這部作品無論有多少個「點」或「點和空間」你有你的輸入。它採用串後最後「點和空間」

+0

@sputnick不,這兩者是不同的。我的作品是OP,你不是。 :) – Kent 2013-03-21 13:06:26

+0

是的。謝謝肯特! – 2013-03-21 13:08:51

+0

是的,編輯我的帖子只有awk,謝謝 – 2013-03-21 13:09:55

6

試試這個:

echo "This is a sentence. This is another sentence" | rev | cut -d "." -f1 | rev 

rev反轉輸出。 -d指定分隔符,將所有內容分解爲字段。 -f指定您要使用的字段。我們可以選擇f1,因爲我們調換了數據。我們不需要知道總共有多少個領域。我們只需要知道第一個。最後,我們再次反轉,以正確的順序重新排列。

+1

-1分隔符是點空間,而不是點。這個答案會給你一個領先的空間。 – dogbane 2013-03-21 13:12:40

+0

你應該再次閱讀這個問題(我在第一個例子中做同樣的錯誤) – 2013-03-21 13:12:41

+0

啊,我錯過了。 Thx – 2013-03-21 13:19:11

20

如果字符串是在一個變量:「」

$ foo="header. stuff. more stuff" 
$ echo "${foo##*. }" 
more stuff 

如果有多個實例(如在我的例子),你想要的一切第一發生後,而不是最後,只需使用一個#

$ echo "${foo#*. }" 
stuff. more stuff 
+1

完美的是,如果您更詳細地解釋了'#'和'##'之間的區別,它會非常棒。 – razzak 2015-09-07 20:04:06

3

AWK是優雅的武器......一個更文明的時代:

[[email protected] ~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $NF } ' 
length 
[[email protected] ~]$ echo "this. is. my. string. of. some" | awk -F'. ' ' { print $NF } ' 
some 

在這種情況下,NF是「字段數」的awk變量,並且此構造說「在找到的最大字段數中打印條目」,所以如果輸入大小從一行變爲下一行,去獲得最後一個。

你也可以做數學題:

[[email protected]~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $(NF-2) } ' 
some 
[[email protected]~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $(NF-3) } ' 
of 
[[email protected]~]$ 

(是的,這是遲到了OP 3年了,但我的牛orkers之一今天向我指出這個頁面的東西,我們正在處理,所以我以爲我會放在這裏,以防其他人也在尋找。)

相關問題